[UWP][全般] アプリデータをファイルで読み書きする

以前、「アプリケーションデータの場所を取得する」の記事でアプリデータ用のファイルが保存されるディレクトリの取得方法について説明しました。

今回はこのディレクトリに対して、アプリデータをファイルに書き込んだり読み込んだりする方法について見て行きましょう。

データを書き込む場合は、はじめにファイルを作成します。ファイルを作成するにはStorageFolderクラスのCreateFileAsyncメソッドを使用します。第1引数に作成するファイル名、第2引数にオプションを指定します。このオプションはすでにファイルが存在する場合に上書き保存する(ReplaceExisting)といった、CreationCollisionOption列挙体の値を指定します。あとは、作成したファイルへデータを書き込みます。データを書き込むにはFileIOクラスのWriteTextAsyncメソッドを使用します。第1引数には作成したファイルを、第2引数には書き込むデータを指定します。

続いてデータの読み込みについて見ていきましょう。データを読み込む場合は、StorageFolderクラスのReadTextAsyncメソッドを使用します。引数には、読み込むデータが書かれているファイル名を指定します。次にFileIOクラスのReadTextAsyncメソッドを使用してデータを読み込みます。引数には読み取るファイルを指定します。

以下に読み書きの例を示します。MainPage.xamlにはButton2つとTextBoxを1つ配置します。

public sealed partial class MainPage : Page
{
    // 保存先のディレクトリを取得
    Windows.Storage.StorageFolder localFolder =
        Windows.Storage.ApplicationData.Current.LocalFolder;

    public MainPage()
    {
        this.InitializeComponent();
    }

    // データの読み込み
    private async void btnGetData_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            Windows.Storage.StorageFile sampleFile = await localFolder.GetFileAsync("appData.txt");
            String myData = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

            txtData.Text = myData;
        }
        catch (Exception)
        {
            // データが存在しない場合の処理
        }

    }

    // データの書き込み
    private async void btnDataSave_Click(object sender, RoutedEventArgs e)
    {
        // データ書き込み先のファイルを作成
        //(ファイル作成時のオプションは、既存の入るがある場合に置換する)
        Windows.Storage.StorageFile appFile = 
            await localFolder.CreateFileAsync("appData.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting);

        // 作成したファイルへのデータ書き込み
        await Windows.Storage.FileIO.WriteTextAsync(appFile, txtData.Text;
    }
}

実行例

 

 

[UWP][全般] 複数のデータを簡易読み書きする

前回の「アプリデータを簡易読み書きする」では、単一のデータのみの読み書きを行いました。

今回は1つのキーで複数のデータを管理(読み書き)する方法を見ていきます。

複数のデータのことをコンポジット値と呼びます。コンポジット値を作成するには、はじめにApplicationDataCompositeValueオブジェクトを生成します。ここで作成したオブジェクトは、オブジェクト名[“キー名”] という書式で使用します。

以下にコンポジット値を読み書きするC#のコードを示します。MainPage.xamlにはボタンとテキストボックスを2つずつ配置しています。

データの読み込み側では、読み取ったデータが存在しない場合を考慮して、if文でnulかどうかを判定しています。nullでない場合にデータの読み取りを行っています。

書き込み側では、はじめにコンポジット値を作成しています、この例では2つのTextBoxから読み取った値をキー「value1」と「value2」それぞれ代入した後、前回の記事で説明した手法で保存をしています。

public sealed partial class MainPage : Page
{
    Windows.Storage.ApplicationDataContainer _localSettings =
        Windows.Storage.ApplicationData.Current.LocalSettings;

    public MainPage()
    {
        this.InitializeComponent();
    }


    private void btnGetData_Click(object sender, RoutedEventArgs e)
    {
        Windows.Storage.ApplicationDataCompositeValue composite =
            (Windows.Storage.ApplicationDataCompositeValue)_localSettings.Values["MyData"];

        if (composite == null)
        {
            // データが存在しない場合
        }
        else
        {
            // コンポジット値の読み込み
            txtData.Text = composite["value1"].ToString();
            txtData2.Text = composite["value2"].ToString();
        }

    }

    private void btnDataSave_Click(object sender, RoutedEventArgs e)
    {
        Windows.Storage.ApplicationDataCompositeValue composite =
             new Windows.Storage.ApplicationDataCompositeValue();

        // コンポジット値の作成
        composite["value1"] = txtData.Text;
        composite["value2"] = txtData2.Text;

        // コンポジット値の書き込み
        _localSettings.Values["MyData"] = composite;
    }
}

実行例

 

[UWP][全般] アプリデータを簡易読み書きする

今回はアプリデータを簡易的に読み書きする方法を見ていきます。

データベース的な使い方というよりも、アプリの設定を読み書きするような場面で使用します。

アプリデータを簡易的に読み書きするには、ApplicationData.LocalSettingsプロパティを使用しApplicationDataContainerオブジェクトとして取得します。後は取得したオブジェクト.Values[“データ名”]という書式で読み書きを行います。保存したデータはアプリを終了しても残ります。

以下にデータを読み書きするC#のコードを示します。MainPage.xamlにはボタンを2つとテキストボックスを配置しています。

public sealed partial class MainPage : Page
{
    Windows.Storage.ApplicationDataContainer _localSettings =
        Windows.Storage.ApplicationData.Current.LocalSettings;

    public MainPage()
    {
        this.InitializeComponent();
    }


    private void btnGetData_Click(object sender, RoutedEventArgs e)
    {
        // アプリデータの読み込み
        txtData.Text = _localSettings.Values["MyData"].ToString();
    }

    private void btnDataSave_Click(object sender, RoutedEventArgs e)
    {
    	// アプリデータの書き込み
        _localSettings.Values["MyData"] = txtData.Text;
    }
}

実行例