パッケージしたアプリの「ローカルフォルダ」にアプリの設定データを保存する

もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3

やりたいこと

今までWPFアプリを主に触っていたので、UWPで「ユーザーごとに、アプリの設定を保存しておきたい」というときにどうしたらいいか全然わからなかった。

きくところによると、UWPはお作法に従ってると、ユーザーごとに設定を保存して、もしアプリをアンインストールしたら全部きれいに消し去ってくれるらしい。(自前で、インストーラーで不要になったファイルをお掃除するようなことをしなくていい)

どうやるか調べたい。

前提

  • VisualStudio2022 Community 17.1.4
  • WinUI3 と パッケージプロジェクト
  • Windows App SDK 1.0

やり方① ユーザーごとのローカルアプリデータストアを使う

MSドキュメントでいうところの 「簡易ローカル設定を作成して取得する」に書いてあるやり方。

private void Button_Click(object sender, RoutedEventArgs e)
{
    Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

    localSettings.Values["MyValue1"] = "123";

    if (localSettings.Values.ContainsKey("MyValue1"))
    {
        // データあり
    }
    else
    {
        // データなし
    }
}

ファイルの保存は、下記に行われてるっぽい。(公式docは見つけられなかったが)

C:\Users\<ユーザー名>\AppData\Local\Packages\<数字の羅列>\Settings\settings.dat

↑保存の前後で比較すると、こんな感じになってた

アプリをアンインストールすると、<数字の羅列>以下のフォルダが全部消えるので、データも消える。

今回は試してないが、

  • ApplicationData.SetVersionAsync()でバージョン管理(アプリバージョンごとの設定管理)をしたり、
  • ApplicationDataContainer.CreateContainer ()でコンテナを使って階層データを管理したり

もできるらしい。

やり方② ユーザーごとのフォルダに自前でファイルを作成して保存

MSドキュメントでいうところの 「ローカル ファイルを作成して読み取る」に書いてあるやり方。

private void myButton_Click(object sender, RoutedEventArgs e)
{
    // LocalFolderは、下記を指す。
    // C:\Users\<ユーザー名>\AppData\Local\Packages\<数字の羅列>\LocalState
    Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

    // 自前でファイルを作って、書き込む。
    string path = Path.Combine(localFolder.Path, "abc.txt");
    File.AppendAllText(path, "abc!");
}

コード中のWindows.Storage.ApplicationData.Current.LocalFolderは下記を指す様子。

C:\Users\<ユーザー名>\AppData\Local\Packages\<数字の羅列>\LocalState

これも①と同じように、アプリをアンインストールすると、<数字の羅列>以下のフォルダが全部消えるので、データも消える。

注意

今回使ったWindows.Storage.ApplicationDataContainerWindows.Storage.ApplicationData.Current.LocalFolderは、パッケージしたプロジェクトでのみ使用可能。
デスクトップアプリからは使用できない。

↑こうなる

参考

msdocs 設定と他のアプリ データを保存して取得する

https://docs.microsoft.com/ja-jp/windows/apps/design/app-settings/store-and-retrieve-app-data

かずきのUWP入門

https://www.slideshare.net/okazuki0130/uwp-63667923
>P62あたり