酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでStorageFileのファイルからテキストを読み取る

アプリローカルのフォルダに保存したテキストファイルからテキストを読み出そうとすることはよくあります。本記事ではStorageFileのファイルからテキストを読み取る方法をご紹介したいと思います。

ファイルからのテキストを読み取る

Windows.Storage名前空間のFileIOクラスのReadTextAsyncメソッドを使って、ファイルのテキストを読み取ります。

// using Windows.Storage;

var uri = new System.Uri("ms-appx:///xxx.text");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
var var text = await FileIO.ReadTextAsync(file);

ストリームを使ってファイルからのテキストを読み取る

Windows Phone 8とソースコードを共存させることを考える場合にはFileIOクラスが使えません。なので、こちらの方法を使ってテキストを読み込むと良いでしょう。

StorageFile.OpenReadAsyncメソッドを使ってストリームを開きます。このメソッドは、ストリームを開く操作が完了したときにファイルコンテンツのストリームを返します。さらにstreamのGetInputStreamAtメソッドを実行して入力ストリームを取得します。

最後にinputStreamをコンストラクタ引数にしてDataReaderオブジェクトを生成し、LoadAsyncメソッドと実行してデータを読み込みます。読み込んだデータをテキストとして解釈するためにReadStringメソッドを実行して、ようやくテキストを得ることができます。

// using Windows.Storage;

var uri = new System.Uri("ms-appx:///xxx.text");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
var text = default(string);
using (var stream = await file.OpenReadAsync())
{
    var size = stream.Size;
    using (var inputStream = stream.GetInputStreamAt(0))
    {
        var dataReader = new DataReader(inputStream);
        var numBytesLoaded = await dataReader.LoadAsync((uint)size);
        text = dataReader.ReadString(numBytesLoaded);
    }
}

関連記事

WindowsランタイムAPI(Windows Runtime API, WinRT API)を使ってアプリ開発する際に逆引きとしてお使いください。