2015年12月2日水曜日

テキストファイルを読む

インストールされているフォルダの test.txt ファイルを読む(Unicode)
Uri uri = new System.Uri("ms-appx:///test.txt");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);
using (Stream stream = (await file.OpenReadAsync()).AsStream()) {
    using (TextReader reader = new StreamReader(stream)) {
        textBox.Text = await reader.ReadToEndAsync();
    }
}
Shift-JISのファイルを読むにはEncoderを指定する
Uri uri = new System.Uri("ms-appx:///test.txt");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);
using (Stream stream = (await file.OpenReadAsync()).AsStream()) {
    var enc = System.Text.Encoding.GetEncoding("Shift_JIS");
    using (TextReader reader = new StreamReader(stream, enc)) {
        textBox.Text = await reader.ReadToEndAsync();
    }
}
デフォルトでは Shift-JIS のEncoderが取得できない(例外が発生する)。
デフォルト以外のエンコードを使用するには、Applicationの初期化などで次の関数をコールしておく。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

特定のフォルダ以外のファイル(直接パスを指定して)は読むことが出来ない
"毎回"ファイルピッカーを表示ユーザーに指定してもらうしかないらしい。
これは保存時でも同じで、"上書き保存"という動作さえも出来ない。
ファイルを使うアプリはユーザーから見ても使いづらいことになっているようだ。

15/12/08 追記
StorageApplicationPermissions.FutureAccessList を使用して一度ユーザーに指定されたファイルを保存しておくことができるようだ。
これを用いれば次回アプリケーションが起動した時にそのファイルを使用したりすることが可能。

0 件のコメント:

コメントを投稿