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

もくじ
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あたり

参考書

WinUI3

WinUI3でアプリを作ろうと思ったときのとっかかりによかった。 msdocsに書いてある情報を、体系的に、順番に読みたいな、というときによいかも。(ただし英語)
この本で分からなかった、かゆいところに手が届かなかった部分を私は記事にしてる感じ。

C#①

表紙に書いてある通り、教科書として最適。 これからC#を勉強したいけど、ネットだけで勉強するのは効率が悪いから体系的に学べる本が欲しいときや、 ちょっとC#を勉強してコード書けるようになったけど、もう少し広く深く知りたいなというときによいと思う。
私は仕事で触れるコードを軸に、基本ネットで断片的にC#を学んだので、その知識の隙間を埋めて枝葉を広げるためにとても分かりやすかった。

C#②

C#の文法的に色々できるのは分かったが、いざ実装するときに、わかったことを使ってどう実装すればいいのか?と悩んだときに指針になりそうな本。
「プロパティ等の名前の付け方、どうすればいい?」「情報をクラス外部に見せるときに、プロパティにすべき?メソッドにすべき?」「異常だと判定したいとき、どんなときにどんな例外をスローすべき?」などなど、勉強になる部分が山ほどあった。
私のように「コードは書くけどこれであってるのか自信がない、レビューで指摘されるのが嫌だ、実装時の(心の)よりどころが欲しい」という人に最適。