将文件保存在隔离存储中
本文关键字:存储 隔离 存在 文件 保存 | 更新日期: 2023-09-27 18:15:38
我正在为一个班级做一个成绩册程序作业;细节并不那么重要,除了知道我需要能够保存文件并在以后调用它。我知道如何序列化、反序列化等等,一切都很好。但当我想存钱时,问题就来了。我对整个保存数据场景有点陌生,我不太了解技术,但我所拥有的似乎应该可以工作-除了每次我尝试它时,我都会得到一个错误。
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的注释,move操作失败,因为它在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");
失败的原因是using块打开了文件Temp.utc
,打开的文件不能移动。一旦执行离开using块,Dispose
方法在isoStream
上被调用,导致它关闭打开的文件。