将文件保存在隔离存储中
Saving file in isolated storage
我正在为 class 编写成绩簿程序作业;细节不是那么重要,除了知道我需要能够保存文件并在以后调用它。我知道如何序列化、反序列化等,一切都很好。但是当我尝试保存时,问题就来了。我对整个保存数据场景有点陌生,我并不完全了解这些技术,但我所拥有的似乎应该有效 - 除了每次尝试时,我都会收到错误消息。
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");
}
}
}
}
我尝试移动文件的标记行是我遇到问题的地方。其他一切正常,但当我到达那条线时,它会抛出一个带有消息 "Operation not permitted" 的 IsolatedStorageException。我查看了所有地方,研究了 MSDN,搜索了所有可能的地方,但我无法弄清楚问题出在哪里。这可能只是我忽略的事情,但我在这里撕毁了我的头发,我需要一些帮助。谢谢
要扩展 archon's 注释,移动操作失败,因为它在 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 块,就会在 isoStream
上调用 Dispose
方法,这会导致它关闭打开的文件。
我正在为 class 编写成绩簿程序作业;细节不是那么重要,除了知道我需要能够保存文件并在以后调用它。我知道如何序列化、反序列化等,一切都很好。但是当我尝试保存时,问题就来了。我对整个保存数据场景有点陌生,我并不完全了解这些技术,但我所拥有的似乎应该有效 - 除了每次尝试时,我都会收到错误消息。
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");
}
}
}
}
我尝试移动文件的标记行是我遇到问题的地方。其他一切正常,但当我到达那条线时,它会抛出一个带有消息 "Operation not permitted" 的 IsolatedStorageException。我查看了所有地方,研究了 MSDN,搜索了所有可能的地方,但我无法弄清楚问题出在哪里。这可能只是我忽略的事情,但我在这里撕毁了我的头发,我需要一些帮助。谢谢
要扩展 archon's 注释,移动操作失败,因为它在 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 块,就会在 isoStream
上调用 Dispose
方法,这会导致它关闭打开的文件。