WinRT APIによるファイル保存時の注意

WinRT APIを使ってテキスト情報などをファイルに保存する場合のちょっとした注意です。

テキストのファイル保存は、Windows.Storage名前空間のStorageFile、TextWriterクラス等を使います。具体的には、

    List<string> statements = …;
    StorageFile file = …;
    using (var fo = await file.OpenAsync(FileAccessMode.ReadWrite))
    {
        TextWriter writer = new StreamWriter(fo.AsStreamForWrite());
        foreach (var s in statements)
        {
            await writer.WriteLineAsync(s);
        }
        writer.Flush();
    }

こんな感じのコードになります。fileは、FilePickerによるファイル選択やアプリストアから作成してください。注意点として、赤字で書いたステートメントを入れてください。TextWriterはある一定のサイズごとに書き込むようで、Writerに対して書き込んだ情報を物理ストレージに吐き出させるFlushメソッドをコールしないと書き込んだつもりのテキスト情報が全て保存されない場合があります。ファイルに書き込んだはずのデータ量と実際に保存されたファイルのサイズが異なる場合は、この点をチェックしてみてください。