好的,基本上我的问题是来自IsolatedFileStorage的读取和XML文件。我将完成导致我的错误的过程,然后我将列出相关的代码和XML文件。
我不能为我的生活找到解决方案(链接到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周了。
答案 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 - 除非您有复杂的需求,否则这些可能就足够了。