// File name. Let us use the entry assembly name with .dat as the extension.
private string settingsFileName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name + ".dat";
#endregion
#region Constructor
// The default constructor.
public ApplicationStorage() {
LoadData();
}
// This constructor is required for deserializing our class from persistent storage.
protected ApplicationStorage(SerializationInfo info, StreamingContext context)
: base(info, context) {
}
#endregion
#region Private methods
private void LoadData() {
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
if (isoStore.GetFileNames(settingsFileName).Length == 0) {
// File not exists. Let us NOT try to DeSerialize it.
return;
}
// Read the stream from Isolated Storage.
Stream stream = new IsolatedStorageFileStream(settingsFileName, FileMode.OpenOrCreate, isoStore);
if (stream != null) {
try {
// DeSerialize the Hashtable from stream.
IFormatter formatter = new BinaryFormatter();
Hashtable appData = (Hashtable)formatter.Deserialize(stream);
// Enumerate through the collection and load our base Hashtable.
IDictionaryEnumerator enumerator = appData.GetEnumerator();
while (enumerator.MoveNext()) {
this[enumerator.Key] = enumerator.Value;
}
}
finally {
// We are done with it.
stream.Close();
}
}
}
#endregion
#region Public Methods
public void ReLoad() {
LoadData();
}
/// <summary>
/// Saves the configuration data to the persistent storage.
/// </summary>
public void Save() {
// Open the stream from the IsolatedStorage.
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
Stream stream = new IsolatedStorageFileStream(settingsFileName, FileMode.Create, isoStore);
if (stream != null) {
try {
// Serialize the Hashtable into the IsolatedStorage.
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, (Hashtable)this);
}
finally {
stream.Close();
}
}
}
#endregion
}
该类集成hashtable,因此拥有Hashtable 的功能,该类的两个重要方法,一个是Load 一个是Save。一个是将流序列化成对象,一个是将对象序列化为流。
用法如下:
ApplicationStorage storage = new ApplicationStorage();
if (storage["Key1"] != null) {
object ht = storage[Key1];
if (ht != null) {
...
}
}
其实就像hashtable 一样用啦!
联系客服