繁体   English   中英

将文件保存在隔离存储中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM