2026/02/02(月) [n年前の日記]
#1 [lazarus] Lazarusでアプリの設定ファイルを保存したい
Lazarus 4.4 で、アプリの設定ファイルを保存したい。環境は Windows11 x64 25H2。
設定ファイルを保存する場所として、C:\Users\(USERNAME)\AppData\Roaming\ を取得して、その下にアプリ名でディレクトリ(フォルダ)を作成して、その中に .json 等を保存したい。
Windows11の場合、件のディレクトリは環境変数 %APPDATA% で指定されているはずなのだけど…。
Lazarus ではどうやってそのディレクトリパスを取得するのか少しググってみたら、GetAppConfigDir() というものがあるそうで、これを使えば設定を保存しても良さそうなディレクトリを提示してくれる、らしいのだけど…。
_Multiplatform Programming Guide/ja - Lazarus wiki
試してみたら、AppData/Roaming ではなくて、AppData/Local を返してきた。Roaming のほうを取得したいのだけどな…。
結局、こうなった。
ConcatPaths() は、配列?に入った文字列を結合してファイルパスを作ってくれるらしい。
ただ、それぞれのフォルダの違いを確認してみたところ…。もしかするとこの場合、Local フォルダに入れたほうがいいのだろうか…?
_AppData 直下の「Local」「LocalLow」「Roaming」フォルダの違い|ことりと
_AppDataの下にあるLocal,Roaming,LocalLowの3つはどんな違いがある? - おねーさんブログ
_ユーザーフォルダの「Roaming」「Local」「LocalLow」の違いについて | おのでらの創作日記 in ソーサリーフォース
_猫科研究所 - Roaming, Local, LocalLow
設定ファイルを保存する場所として、C:\Users\(USERNAME)\AppData\Roaming\ を取得して、その下にアプリ名でディレクトリ(フォルダ)を作成して、その中に .json 等を保存したい。
Windows11の場合、件のディレクトリは環境変数 %APPDATA% で指定されているはずなのだけど…。
Lazarus ではどうやってそのディレクトリパスを取得するのか少しググってみたら、GetAppConfigDir() というものがあるそうで、これを使えば設定を保存しても良さそうなディレクトリを提示してくれる、らしいのだけど…。
_Multiplatform Programming Guide/ja - Lazarus wiki
試してみたら、AppData/Roaming ではなくて、AppData/Local を返してきた。Roaming のほうを取得したいのだけどな…。
結局、こうなった。
function GetConfigDir: string;
var
dirpath: string;
begin
dirpath := GetEnvironmentVariable('APPDATA');
if dirpath = '' then
begin
dirpath := ConcatPaths([GetUserDir, 'AppData', 'Roaming']);
end;
Result := ConcatPaths([dirpath, CONFIG_DIR]);
end;
- GetEnvironmentVariable() で、環境変数 APPDATA の内容を取得して、
- 万が一、中身が空だったら、GetUserDir でユーザフォルダのパスを取得しつつ、その下に AppData/Roaming があるはずだと決め打ちして取得してしまう。
- 最後にアプリ名を追加して、そこが保存先ディレクトリだと確定する。
ConcatPaths() は、配列?に入った文字列を結合してファイルパスを作ってくれるらしい。
ただ、それぞれのフォルダの違いを確認してみたところ…。もしかするとこの場合、Local フォルダに入れたほうがいいのだろうか…?
_AppData 直下の「Local」「LocalLow」「Roaming」フォルダの違い|ことりと
_AppDataの下にあるLocal,Roaming,LocalLowの3つはどんな違いがある? - おねーさんブログ
_ユーザーフォルダの「Roaming」「Local」「LocalLow」の違いについて | おのでらの創作日記 in ソーサリーフォース
_猫科研究所 - Roaming, Local, LocalLow
[ ツッコむ ]
以上です。