[英]Saving file in isolated storage
我正在为一个班级的成绩簿课程分配作业; 除了知道我需要能够保存文件并稍后再调用之外,其他细节并不重要。 我知道如何序列化,反序列化等,一切都很好。 但是问题出在我尝试保存时。 我对整个保存数据场景有些陌生,我也不是很了解这些技术,但是我似乎应该可以使用-除了每次尝试时都会出错。
private static void Save (IList<GradebookEntry> gradebook) {
Console.WriteLine ("Saving changes. Please wait...");
using (IsolatedStorageFile stored = IsolatedStorageFile.GetStore (IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null)) {
try {
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream ("Temp.utc", FileMode.Create, stored)) {
BinaryFormatter bform = new BinaryFormatter ();
bform.Serialize (isoStream, gradebook);
string[] s = stored.GetDirectoryNames ();
stored.DeleteFile ("Gradebook.utc");
stored.MoveFile ("Temp.utc", "Gradebook.utc"); // #!!
}
Console.WriteLine ("Changes saved.");
}
catch (Exception ex) {
Console.WriteLine ("Saving failed. Reason: {0}", ex.Message);
}
finally {
if (stored.FileExists("Temp.utc")) {
stored.DeleteFile ("Temp.utc");
}
}
}
}
我尝试移动文件的标记行就是我遇到的问题。 其他所有工作都很好,但是当我到达该行时,它将引发带有消息“不允许操作”的IsolatedStorageException。 我四处张望,研究了MSDN,已经搜寻了所有可以找到的地方,但我不知道是什么问题。 这可能只是我所忽略的事情,但是我在这里扯头发了,我可以使用一些帮助。 谢谢。
为了扩展archon的注释,移动操作失败,因为它位于using块内。 如下更改代码可解决此问题。
using (IsolatedStorageFileStream isoStream =
new IsolatedStorageFileStream("Temp.utc", FileMode.Create, stored))
{
BinaryFormatter bform = new BinaryFormatter();
bform.Serialize(isoStream, gradebook);
}
stored.DeleteFile("Gradebook.utc");
stored.MoveFile("Temp.utc", "Gradebook.utc");
它为什么失败的原因是,使用块具有文件Temp.utc
开,打开的文件不能移动。 一旦执行离开using块,就在isoStream
上调用Dispose
方法,这将导致它关闭打开的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.