将文件保存在隔离存储中

本文关键字:存储 隔离 存在 文件 保存 | 更新日期: 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上被调用,导致它关闭打开的文件。