我正在关注Windows Phone 8开发的教程,还有一个额外的练习要完成,但我在某些方面陷入困境。我对Silverlight和.Net不是很有经验,所以我希望这不是一件小事。
基本上,我会读取一个示例数据文件。该文件放在应用程序的已安装目录中。它是xaml格式的文件,我将使用XmlReader解析它。我知道那些东西不是很好(在安装的目录中的文件操作等),但我这样做是为了锻炼,因此我没有努力使它成为一个很好的应用程序。
我的程序如下: 首先,我将文件内容读取为字符串,然后将字符串传递给XmlReader。问题开始了。 xmlReader上的Read()函数在第1行第1列引发异常。因此,我检查“contents”字符串的值。在Text Visualizer窗口中,一切看起来都很正常,那就是内容字符串具有我输入文件的内容。但是当我在快速监视窗口中评估表达式contents.ElementAt(0)时,输出是“字符和内容.ElementAt(1)是<字符,我希望它是第0个元素。而且不够奇怪,当我在读取文件时删除第一个元素(如注释掉的内容中所示。移除(0,1),我没有得到异常。但是我在Text Visualizer中看到的是相同的。我可以继续我的练习这样,但我真的想找出这种奇怪行为的原因。我认为这可能是VS调试器中的一个错误,但在这种情况下,我不应该在运行时获得异常。
string contents;
try
{
StorageFolder localFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("SampleData");
StorageFile file = await localFolder.GetFileAsync(filename);
using (IRandomAccessStream textStream = await file.OpenReadAsync())
{
using (DataReader textReader = new DataReader(textStream))
{
uint length = (uint)textStream.Size;
await textReader.LoadAsync(length);
contents = textReader.ReadString(length);
//contents = contents.Remove(0, 1);
}
}
}
catch
{
contents = "TODO catch exception";
}
return contents;
xml解析:
string filePath = "SampleData.xaml";
string contents = await FileHelper.ReadFile(filePath);
// parse xaml string
using (XmlReader xmlReader = XmlReader.Create ( new StringReader (contents) ) )
{
try
{
while (xmlReader.Read())
{
string temp = xmlReader.ReadContentAsString();
}
}
catch (Exception e)
{
}
}