0

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

  1. 在第一次执行时,它识别出该文件不存在 - 因此它在 IsolatedFileStorage 中创建该文件
  2. 在第二次执行时,它现在可以看到该文件确实存在,因此它加载了 XML 文件
  3. 在第三次执行时,它可以看到它存在 - 但它会引发 XML 错误

我终生无法找到解决方案(此处链接到 MSDN 上的其他讨论)

因此,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>

我知道非常先进 - 但是它会引发以下错误(此处),您可以在 Social.MSDN 页面的底部找到完整的错误文本。

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

4

3 回答 3

1

为什么不尝试使用简单的 StreamReader 读取文件?下面是我创建的从 store 中读取文件的方法的一部分。试一试,检查您的内容,然后尝试从 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;
     }
}
于 2011-02-28T12:24:41.800 回答
0

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

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

于 2011-02-28T10:38:34.340 回答
0

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

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

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

于 2011-02-28T12:50:36.603 回答