0

私は 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)
            {

            }
        }
4

0 に答える 0