もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3
やりたいこと
今までWPFアプリを主に触っていたので、UWPで「ユーザーごとに、アプリの設定を保存しておきたい」というときにどうしたらいいか全然わからなかった。
きくところによると、UWPはお作法に従ってると、ユーザーごとに設定を保存して、もしアプリをアンインストールしたら全部きれいに消し去ってくれるらしい。(自前で、インストーラーで不要になったファイルをお掃除するようなことをしなくていい)
どうやるか調べたい。
前提
やり方① ユーザーごとのローカルアプリデータストアを使う
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.ApplicationDataContainer
や Windows.Storage.ApplicationData.Current.LocalFolder
は、パッケージしたプロジェクトでのみ使用可能。
デスクトップアプリからは使用できない。
↑こうなる
参考
msdocs 設定と他のアプリ データを保存して取得する
https://docs.microsoft.com/ja-jp/windows/apps/design/app-settings/store-and-retrieve-app-data
かずきのUWP入門