(C#)AppData内の設定ファイルの保存先
作ったもの
ウィンドウの位置、最終起動時刻、最近使ったファイルなど、設定データを保存する際は、AppData\Local\[会社名]\[アプリケーション名] に保存するのが望ましいです。そのフォルダパスを取得するコードを紹介します。
前提
import System.Reflection;
コード
/// <summary> /// AppData\Localの中にある設定保存用のディレクトリを取得します。 /// [ユーザー名]\AppData\Local\[会社名]\[アプリケーション名] /// 会社名が設定されていない場合は "Default" になります。 /// </summary> static private string LocalAppData{ get { Func<string, bool> nameHasForbiddenChar = (str) => { foreach (var each in "\\/:*?\"<>|") { if (str.Contains(each + "")) { return true; } } return false; }; Assembly asm = Assembly.GetExecutingAssembly(); string asmName = asm.GetName().Name; Attribute customAttr = Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute)); string company = (customAttr as AssemblyCompanyAttribute).Company; if (company.Length == 0 || nameHasForbiddenChar(company)) { company = "Default"; } string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); return path + "\\" + company + "\\" + asmName; } }
使い方
// s : C:\Users\[ユーザー名]\AppData\Local\[会社名]\[アプリケーション名] string s = LocalAppData;
説明
設定データの置き場所は、いくつかの候補があります。
①実行ファイル(.exe)と同じ場所
②USER\[ユーザー名]\AppData\Local\[会社名]\[アプリケーション名]
③USER\[ユーザー名]\AppData\Roaming\[会社名]\[アプリケーション名]
④その他(マイドキュメントなど)
Windows 95/98の頃には、①が多かったのですが、Windows Vista の頃から管理者権限のフォルダにあるEXEを実行すると、複数ユーザーの設定が保存できない問題や、権限不足で設定データを書き込めなくなる問題が出てきました。そのため、2019年の時点では②や③が主流となっています。
Roamingは、同じユーザーが他のコンピューターを使っても同じデータを引き継ぐ必要があるときに使用します。普段はLocalで良いでしょう。