在隔离存储中加载XML

本文关键字:加载 XML 存储 隔离 | 更新日期: 2023-09-27 18:05:01

我使用以下代码在独立存储中创建和加载xml。在第一部分中,如果文件不存在,它将在隔离存储中创建该文件,否则它将加载隔离存储文件中已经创建/加载的文件。问题是当它试图加载它在第一次调用函数时(成功)创建/加载的文件时。下面是代码

public void InitAch()
{
    using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!storage.FileExists("Achievements.xml"))
        {
            using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
            {
                XDocument xml = XDocument.Load("Achievements.xml");
                xml.Save(stream,SaveOptions.None);
            }
        }
        else
        {
            using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Open, FileAccess.Read))
            {
                XDocument xml = XDocument.Load(stream,LoadOptions.None);
                Lexis.Page4.Achievements.sheep = Int32.Parse(xml.Root.Element("BlackSheep").Value);
                Lexis.Page4.Achievements.singularity = Int32.Parse(xml.Root.Element("Singularity").Value);
                Lexis.Page4.Achievements.luke = Int32.Parse(xml.Root.Element("LuckyLuke").Value);
                Lexis.Page4.Achievements.gardener = Int32.Parse(xml.Root.Element("Gardener").Value);
                Lexis.Page4.Achievements.dumbo = Int32.Parse(xml.Root.Element("Dumbo").Value);
                Lexis.Page4.Achievements.joker = Int32.Parse(xml.Root.Element("Joker").Value);
                Lexis.Page4.Achievements.maid = Int32.Parse(xml.Root.Element("Maid").Value);
                Lexis.Page4.Achievements.mr = Int32.Parse(xml.Root.Element("MrWords").Value);
                Lexis.Page4.Achievements.secret = Int32.Parse(xml.Root.Element("Detective").Value);
            }
        }
    }

谢谢你的帮助。

在隔离存储中加载XML

if (!storage.FileExists("Achievements.xml"))
    using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
    {
        XDocument xml = XDocument.Load("Achievements.xml");
        xml.Save(stream,SaveOptions.None);
    }

在此代码中:

    第1行:文件不存在
  • 第2行:创建一个新的(空)文件
  • 第4行:加载(空)文件- 此时文件为空,没有加载任何内容!我猜它抛出是因为它,或者因为它无法将名称解析到本地存储-在任何情况下这一行都是不正确的。
  • 第5行:保存(空?)XML文档到文件

您需要修复XML文件的创建。

为什么要创建一个空文件并保存它?这似乎有点……错了。

关于空文件的加载,当然,一旦访问xml.Root.Element("BlackSheep").Value,就会出现异常失败。

该元素在空文件中不存在,因此Element("BlackSheep")将返回null。而.Value属性访问将导致异常。

所以我不确定你需要什么帮助,除了:

  1. 不要创建空XML,因为没有意义;和/或,
  2. 在你的read中添加一些代码来测试文件中是否有实际的东西。