Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
IsolatedStorageSettings.cs
Download fileToto je zdrojový kód souboru IsolatedStorageSettings.cs
Provides a System.Collections.Generic.Dictionary that stores key-value pairs in isolated storage for WPF or Windows Forms.
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace System.IO.IsolatedStorage
{
/// <summary>Provides a <see cref="T:System.Collections.Generic.Dictionary`2" /> that stores key-value pairs in isolated storage. </summary>
/// <exception cref="T:System.ArgumentNullException">This exception is thrown when you attempt to reference an instance of the class by using an indexer and the variable you pass in for the key value is null.</exception>
internal sealed class IsolatedStorageSettings : IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, IEnumerable<KeyValuePair<string, object>>, IDictionary, ICollection, IEnumerable
{
#region member varible and default property initialization
private IsolatedStorageFile _appStore;
private Dictionary<string, object> _settings;
private static IsolatedStorageSettings s_appSettings;
#endregion
#region constructors and destructors
private IsolatedStorageSettings()
{
var assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly == null)
{
throw new IsolatedStorageException("Enable to determine application entry assembly.");
}
this._appStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.Machine | IsolatedStorageScope.Assembly, null, null, assembly.Evidence, null);
this.Reload();
}
/// <summary>
/// IsolatedStorageSettings finalizer
/// </summary>
~IsolatedStorageSettings()
{
if (this._appStore != null)
{
try
{
this.Save();
}
catch (Exception)
{
}
this._appStore.Dispose();
}
}
#endregion
#region action methods
/// <summary>Gets a value for the specified key.</summary>
/// <returns>true if the specified key is found; otherwise, false.</returns>
/// <param name="key">The key of the value to get.</param>
/// <param name="value">When this method returns, the value associated with the specified key if the key is found; otherwise, the default value for the type of the <paramref name="value" /> parameter. This parameter is passed uninitialized.</param>
/// <typeparam name="T">The <see cref="T:System.Type" /> of the <paramref name="value" /> parameter.</typeparam>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
public bool TryGetValue<T>(string key, out T value)
{
object obj2;
this.CheckNullKey(key);
if (this._settings.TryGetValue(key, out obj2))
{
value = (T)obj2;
return true;
}
value = default(T);
return false;
}
/// <summary>Adds an entry to the dictionary for the key-value pair.</summary>
/// <param name="key">The key for the entry to be stored.</param>
/// <param name="value">The value to be stored.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
/// <exception cref="T:System.ArgumentException">
/// <paramref name="key" /> already exists in the dictionary.</exception>
public void Add(string key, object value)
{
this.CheckNullKey(key);
this._settings.Add(key, value);
}
/// <summary>Resets the count of items stored in <see cref="T:System.IO.IsolatedStorage.IsolatedStorageSettings" /> to zero and releases all references to elements in the collection.</summary>
public void Clear()
{
this._settings.Clear();
this.Save();
}
/// <summary>Determines if the application settings dictionary contains the specified key.</summary>
/// <returns>true if the dictionary contains the specified key; otherwise, false.</returns>
/// <param name="key">The key for the entry to be located.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
public bool Contains(string key)
{
this.CheckNullKey(key);
return this._settings.ContainsKey(key);
}
/// <summary>Removes the entry with the specified key.</summary>
/// <returns>true if the specified key was removed; otherwise, false.</returns>
/// <param name="key">The key for the entry to be deleted.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
public bool Remove(string key)
{
this.CheckNullKey(key);
return this._settings.Remove(key);
}
/// <summary>Saves data written to the current <see cref="T:System.IO.IsolatedStorage.IsolatedStorageSettings" /> object.</summary>
/// <exception cref="T:System.IO.IsolatedStorage.IsolatedStorageException">The <see cref="T:System.IO.IsolatedStorage.IsolatedStorageFile" /> does not have enough available free space.</exception>
public void Save()
{
using (IsolatedStorageFileStream stream = this._appStore.OpenFile("__LocalSettings", FileMode.OpenOrCreate))
{
using (MemoryStream stream2 = new MemoryStream())
{
Dictionary<Type, bool> dictionary = new Dictionary<Type, bool>();
StringBuilder builder = new StringBuilder();
foreach (object obj2 in this._settings.Values)
{
if (obj2 != null)
{
Type type = obj2.GetType();
if (!type.IsPrimitive && (type != typeof(string)))
{
dictionary[type] = true;
if (builder.Length > 0)
{
builder.Append('\0');
}
builder.Append(type.AssemblyQualifiedName);
}
}
}
builder.Append(Environment.NewLine);
byte[] bytes = Encoding.UTF8.GetBytes(builder.ToString());
stream2.Write(bytes, 0, bytes.Length);
new DataContractSerializer(typeof(Dictionary<string, object>), dictionary.Keys).WriteObject(stream2, this._settings);
if (stream2.Length > (this._appStore.AvailableFreeSpace + stream.Length))
{
throw new IsolatedStorageException("Not enough space in isolated storage.");
}
stream.SetLength(0L);
byte[] buffer = stream2.ToArray();
stream.Write(buffer, 0, buffer.Length);
}
}
}
void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item)
{
((ICollection<KeyValuePair<string, object>>)this._settings).Add(item);
}
void ICollection<KeyValuePair<string, object>>.Clear()
{
this._settings.Clear();
}
bool ICollection<KeyValuePair<string, object>>.Contains(KeyValuePair<string, object> item)
{
return ((ICollection<KeyValuePair<string, object>>)this._settings).Contains(item);
}
void ICollection<KeyValuePair<string, object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
{
((ICollection<KeyValuePair<string, object>>)this._settings).CopyTo(array, arrayIndex);
}
bool ICollection<KeyValuePair<string, object>>.Remove(KeyValuePair<string, object> item)
{
return ((ICollection<KeyValuePair<string, object>>)this._settings).Remove(item);
}
bool IDictionary<string, object>.ContainsKey(string key)
{
this.CheckNullKey(key);
return this._settings.ContainsKey(key);
}
bool IDictionary<string, object>.TryGetValue(string key, out object value)
{
this.CheckNullKey(key);
return this._settings.TryGetValue(key, out value);
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.ICollection.CopyTo(System.Array,System.Int32)" />.</summary>
/// <param name="array">The one-dimensional <see cref="T:System.Array" /> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection" />. The array must have zero-based indexing.</param>
/// <param name="index">The zero-based index in <paramref name="array" /> at which copying begins.</param>
void ICollection.CopyTo(Array array, int index)
{
((IDictionary)this._settings).CopyTo(array, index);
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IDictionary.Add(System.Object,System.Object)" />.</summary>
/// <param name="key">The object to use as the key of the element to add.</param>
/// <param name="value">The object to use as the value of the element to add.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
void IDictionary.Add(object key, object value)
{
this.CheckNullKey(key);
((IDictionary)this._settings).Add(key, value);
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IDictionary.Clear" />.</summary>
void IDictionary.Clear()
{
this._settings.Clear();
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IDictionary.Contains(System.Object)" />.</summary>
/// <returns>true if the <see cref="T:System.Collections.IDictionary" /> contains an element with the specified <paramref name="key" />; otherwise, false. </returns>
/// <param name="key">The key to locate in the <see cref="T:System.Collections.IDictionary" />.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
bool IDictionary.Contains(object key)
{
this.CheckNullKey(key);
return ((IDictionary)this._settings).Contains(key);
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IDictionary.Remove(System.Object)" />.</summary>
/// <param name="key">The key for the entry to be deleted.</param>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="key" /> is null.</exception>
void IDictionary.Remove(object key)
{
this.CheckNullKey(key);
((IDictionary)this._settings).Remove(key);
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IEnumerable.GetEnumerator" />.</summary>
/// <returns>An <see cref="T:System.Collections.Generic.IEnumerator`1" /> object that can be used to iterate through the collection.</returns>
IEnumerator IEnumerable.GetEnumerator()
{
return this._settings.GetEnumerator();
}
IEnumerator<KeyValuePair<string, object>> IEnumerable<KeyValuePair<string, object>>.GetEnumerator()
{
return this._settings.GetEnumerator();
}
/// <summary>For a description of this member, see <see cref="M:System.Collections.IDictionary.GetEnumerator" />.</summary>
/// <returns>An <see cref="T:System.Collections.Generic.IEnumerator`1" /> object that can be used to iterate through the collection.</returns>
IDictionaryEnumerator IDictionary.GetEnumerator()
{
return this._settings.GetEnumerator();
}
#endregion
#region property getters/setters
/// <summary>Gets an instance of <see cref="T:System.IO.IsolatedStorage.IsolatedStorageSettings" /> that contains the contents of the application's <see cref="T:System.IO.IsolatedStorage.IsolatedStorageFile" />, scoped at the application level, or creates a new instance of <see cref="T:System.IO.IsolatedStorage.IsolatedStorageSettings" /> if one does not exist.</summary>
/// <returns>An <see cref="T:System.IO.IsolatedStorage.IsolatedStorageSettings" /> object that contains the contents of the application's <see cref="T:System.IO.IsolatedStorage.IsolatedStorageFile" />, scoped at the application level. If an instance does not already exist, a new instance is created.</returns>
public static IsolatedStorageSettings ApplicationSettings
{
get
{
if (s_appSettings == null)
{
s_appSettings = new IsolatedStorageSettings();
}
return s_appSettings;
}
}
/// <summary>Gets the number of key-value pairs that are stored in the dictionary.</summary>
/// <returns>The number of key-value pairs that are stored in the dictionary.</returns>
public int Count
{
get { return this._settings.Count; }
}
/// <summary>Gets or sets the value associated with the specified key.</summary>
/// <returns>The value associated with the specified key. If the specified key is not found, a get operation throws a <see cref="T:System.Collections.Generic.KeyNotFoundException" />, and a set operation creates a new element that has the specified key.</returns>
/// <param name="key">The key of the item to get or set.</param>
public object this[string key]
{
get
{
this.CheckNullKey(key);
return this._settings[key];
}
set
{
this.CheckNullKey(key);
this._settings[key] = value;
}
}
/// <summary>Gets a collection that contains the keys in the dictionary.</summary>
/// <returns>A <see cref="T:System.Collections.Generic.Dictionary`2.KeyCollection" /> that contains the keys in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</returns>
public ICollection Keys
{
get { return this._settings.Keys; }
}
bool ICollection<KeyValuePair<string, object>>.IsReadOnly
{
get { return false; }
}
ICollection<string> IDictionary<string, object>.Keys
{
get { return this._settings.Keys; }
}
ICollection<object> IDictionary<string, object>.Values
{
get { return this._settings.Values; }
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.ICollection.Count" />.</summary>
/// <returns>The number of elements that are contained in the <see cref="T:System.Collections.ICollection" />.</returns>
int ICollection.Count
{
get { return this._settings.Count; }
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.ICollection.IsSynchronized" />.</summary>
/// <returns>true if access to the <see cref="T:System.Collections.ICollection" /> is synchronized (thread safe); otherwise, false. In the default implementation of <see cref="T:System.Collections.Generic.Dictionary`2" />, this property always returns false.</returns>
bool ICollection.IsSynchronized
{
get
{
return ((ICollection)this._settings).IsSynchronized;
}
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.ICollection.SyncRoot" />.</summary>
/// <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection" />.</returns>
object ICollection.SyncRoot
{
get
{
return ((ICollection)this._settings).SyncRoot;
}
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.IDictionary.IsFixedSize" />.</summary>
/// <returns>true if the <see cref="T:System.Collections.IDictionary" /> has a fixed size; otherwise, false. In the default implementation of <see cref="T:System.Collections.IDictionary" />, this property always returns false.</returns>
bool IDictionary.IsFixedSize
{
get { return false; }
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.IDictionary.IsReadOnly" />.</summary>
/// <returns>true if the <see cref="T:System.Collections.IDictionary" /> is read-only; otherwise, false. In the default implementation of <see cref="T:System.Collections.IDictionary" />, this property always returns false.</returns>
bool IDictionary.IsReadOnly
{
get { return false; }
}
/// <summary>For a description of this member, see <see cref="P:System.Collections.IDictionary.Item(System.Object)" />.</summary>
/// <returns>The value associated with the specified <paramref name="key" />.</returns>
/// <param name="key">The key of the value to get or set.</param>
object IDictionary.this[object key]
{
get
{
this.CheckNullKey(key);
return ((IDictionary)this._settings)[key];
}
set
{
this.CheckNullKey(key);
((IDictionary)this._settings)[key] = value;
}
}
/// <summary>Gets a collection that contains the values in the dictionary.</summary>
/// <returns>A <see cref="T:System.Collections.Generic.Dictionary`2.ValueCollection" /> that contains the values in the <see cref="T:System.Collections.Generic.Dictionary`2" />.</returns>
public ICollection Values
{
get { return this._settings.Values; }
}
#endregion
#region private member functions
private void CheckNullKey(object key)
{
if (key == null)
{
throw new ArgumentNullException("key");
}
}
private void Reload()
{
using (IsolatedStorageFileStream stream = this._appStore.OpenFile("__LocalSettings", FileMode.OpenOrCreate))
{
using (StreamReader reader = new StreamReader(stream))
{
if (stream.Length > 0L)
{
try
{
List<Type> knownTypes = new List<Type>();
string str = reader.ReadLine();
foreach (string str2 in str.Split(new char[1]))
{
Type item = Type.GetType(str2, false);
if (item != null)
{
knownTypes.Add(item);
}
}
stream.Position = str.Length + Environment.NewLine.Length;
DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), knownTypes);
this._settings = (Dictionary<string, object>)serializer.ReadObject(stream);
}
catch
{
this._settings = new Dictionary<string, object>();
}
}
else
{
this._settings = new Dictionary<string, object>();
}
}
}
}
#endregion
}
}