WindowsStoreアプリでテキストファイルの保存と読み出し(ローミングフォルダ)

MetroUIでファイルを保存、読み込む方法です。

WinRTでは、新たに「ローミングフォルダ」にファイルを保存することができます。ローミングフォルダはユーザーが各デバイスでも共有できる領域となります。


テキストファイルをローミングフォルダから読み込む例

private static async Task<string> ReadFile(string fileName)
{
    // ローミングフォルダ (C:\Users\<ユーザー名>\AppData\Local\Packages\<アプリ別のID>\RoamingState)
    StorageFolder folder = ApplicationData.Current.RoamingFolder;

    try
    {
        // ファイルを開く
        StorageFile file = await folder.GetFileAsync(fileName);
        using (IRandomAccessStream rStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
        using (StreamReader reader = new StreamReader(rStream.AsStream(), Encoding.UTF8))
        {
            // ファイル内容を読み取り
            return reader.ReadToEnd();
        }
    }
    catch (FileNotFoundException)
    {
       //ファイルが存在しない場合(なにもしない)
    }
    return string.Empty;
}

テキストファイルをローミングフォルダに書き込む例

private static async void WriteFile(string fileName , string body)
{
    // ローミングフォルダ
    StorageFolder folder = ApplicationData.Current.RoamingFolder;

    // ファイル(存在すれば上書き)
    StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

    // 書き込み
    using (IRandomAccessStream rStream = await file.OpenAsync(FileAccessMode.ReadWrite))
    using (IOutputStream oStream = rStream.GetOutputStreamAt(0))
    {
        DataWriter writer = new DataWriter(oStream);
        writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
        writer.WriteString(body);
        await writer.StoreAsync();
    }  

}


マイドキュメントは「StorageFolder folder = KnownFolders.DocumentsLibrary;」とも書けますが、KnownFolders.DocumentsLibrary は、ちゃんと設定しないとSystem.UnauthorizedAccessExceptionの例外が出るので使いませんでした。

TEMPフォルダとして、「StorageFolder folder = ApplicationData.Current.TemporaryFolder;」と書くことができます。こちらは簡単に利用できます。パスは「C:\Users\<ユーザー名>\AppData\Local\Packages\<アプリ別のID>\TempState」となります。

利用方法

// 書き込み
WriteFile("test.txt","テスト本文");

// 読み込み
string value = await ReadFile("test.txt");