IsolatedFileStorage XML阅读崩溃

时间:2011-02-28 09:44:30

标签: windows-phone-7 windows-phone

好的,基本上我的问题是来自IsolatedFileStorage的读取和XML文件。我将完成导致我的错误的过程,然后我将列出相关的代码和XML文件。

  1. 在第一次执行时,它识别出该文件不存在 - 因此它在IsolatedFileStorage中创建文件
  2. 在第二次执行时,它现在可以看到该文件确实存在,因此它加载了XML文件
  3. 在第三次执行时,它可以看到它存在 - 但它会抛出XML错误
  4. 我不能为我的生活找到解决方案(链接到MSDN上的其他讨论here

    因此,在IsolatedFileStorage中读取/创建XML文件的代码如下:

    try
    {
          /***********************
           * CHECK THE SETTINGS
           ********************/
           if (store.FileExists("AppSettings.xml"))
           {
                streamSettings = new IsolatedStorageFileStream("AppSettings.xml", System.IO.FileMode.Open, store);
                DebugHelp.Text = "AppSettings.xml exists... Loading!";
                streamSettings.Seek(0, System.IO.SeekOrigin.Begin);
                xmlDoc = XDocument.Load(streamSettings, LoadOptions.None);
           }
           else
           {
                streamSettings = new IsolatedStorageFileStream("AppSettings.xml", System.IO.FileMode.Create, store);
                DebugHelp.Text = "AppSettings.xml does not exist... Creating!";
                xmlDoc = XDocument.Load("AppSettings.xml", LoadOptions.None);
           }
    
           if (xmlDoc != null)
                xmlDoc.Save(streamSettings);
    }
    catch (Exception e)
    {
           DebugHelp.Text = e.ToString();
    }
    finally
    {
           streamSettings.Close();
    }
    

    相关的XML文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Settings>
    </Settings>
    

    我知道非常高级 - 但它会抛出以下错误(here),您可以在Social.MSDN页面的底部找到完整的错误文本。

    请帮助 - 我一直在寻找解决方案(因为社交网站上的一个解决方案不起作用)大约2周了。

3 个答案:

答案 0 :(得分:1)

为什么不尝试使用简单的StreamReader读取文件?下面是我创建的一个方法的一部分,用于从商店读取文件。试一试,检查你的内容,然后尝试从String加载xml(XDocument.Parse等...)

String fileContent = String.Empty;

using (_store = IsolatedStorageFile.GetUserStoreForApplication())
{
     if (_store.FileExists(file))
     {
         _storeStream = new IsolatedStorageFileStream(file, FileMode.Open, _store);
         using (StreamReader sr = new StreamReader(_storeStream))
         {
              fileContent = sr.ReadToEnd();
         }
         __storeStream.Close();

         return fileContent;
     }
     else {
        return null;
     }
}

答案 1 :(得分:0)

您的代码示例不完整,因此很难确定,但是,如果它已经存在,您可能会发现更容易删除它,而不仅仅是寻找文件的开头。您可以使用FileMode.Create执行此操作。反过来,这意味着您可以取消检查现有文件的需要。

我怀疑问题在于您在后续尝试时将少量文本写入文件,因此将原始/上一部分文本留下。反过来,这会创建一个包含无效XML的文件。

答案 2 :(得分:0)

在我看来,问题在于您的保存方法 - 看起来您可能每次关闭时附加设置 - 覆盖现有设置,您需要确保删除现有文件并创建新文件之一。

为了帮助调试,请尝试使用http://wp7explorer.codeplex.com/ - 这可能会帮助您查看原始文件“在磁盘上”

顺便说一句,对于一般的设置,请查看IsolatedStorage默认提供的AppSettings - 除非您有复杂的需求,否则这些可能就足够了。