私は Windows Phone 8 の開発に関するチュートリアルに従っています。完了するための追加の演習がありますが、ある点で行き詰まりました。私は Silverlight と .Net の経験があまりないので、これが些細なことではないことを願っています。
基本的にはサンプルデータファイルを読み込みます。ファイルは、アプリケーションのインストール ディレクトリに配置されます。これは xaml 形式のファイルで、XmlReader で解析します。それらがあまり良くないことは知っていますが(インストールされたディレクトリでのファイル操作など)、演習のためにこれを行っているため、良いアプリケーションにするために作業しませんでした。
私の手順は次のとおりです。まず、ファイルの内容を文字列として読み取り、その文字列を XmlReader に渡します。ここから問題が始まります。xmlReader の Read() 関数は、1 行 1 列目で例外をスローします。そこで、"contents" 文字列の値を確認します。Text Visualizer ウィンドウでは、すべてが正常に見えます。つまり、内容の文字列には、入力ファイルに入力したものが含まれています。しかし、式の content.ElementAt(0) をクイックウォッチ ウィンドウで評価すると、出力は " 文字であり、contents.ElementAt(1) は < 文字であり、0 番目の要素であると予想されます。ファイルの読み取り時に最初の要素を削除すると (コメントアウトされた contents.Remove(0,1) に見られるように、例外は発生しません。ただし、テキストビジュアライザーで見たものは同じです。これで演習を続けることができます仕方、しかし、私は本当にこの奇妙な行動の原因を突き止めたいと思っています. 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)
{
}
}