uses節にIniFilesを加え、
var
Form1: TForm1;
Ini : TIniFile;
procedure TForm1.Button1Click(Sender: TObject);
begin
Ini := TIniFile.Create('test.ini'); ※1
Ini.WriteBool('flg','a_flg',true);
Ini.Free;
end;
なお、※1を
Ini := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
とすると、アプリケーション名と同じ名前のiniファイルが作成されます。
普通のテキストファイルとかを読み込むときも相対パスだと書き込めなかった経験があります。参考書を見ると、普通に相対パスで特に断りもなく書かれているのですが、何か設定が必要なのでしょうか?ご回答よろしくお願い致します。
TIniFileのCreateはAPIのGetPrivateProfileString関数を
利用しているのですが、この関数はファイル名にフルパスが
指定されていないとWindowsディレクトリにINIファイルを
作成してしまいます。
絶対パスで指定すべきでしょう。
> 普通のテキストファイルとかを読み込むときも相対パスだと
> 書き込めなかった経験があります。
カレントディレクトリはTOpenDialog等で変更されますので、
この場合も相対パスは避けるべきです。
ふぐちゃんさん、どうもありがとうございます。
WINNTフォルダを見たらさりげなく作成されていました(^_^;)。
しかし、プログラムを配布する場合、ユーザーがどのフォルダにアプリケーションをコピーするかわからないので、どうやって絶対パスを書いておけばいいんでしょうか?ちょっと想像がつきません。
Application.ExeName
ExtractFilePath
等をヘルプで調べるといいかも。
ExtractFilePathは関係ないか^^;
相対パスと絶対パスを相互変換する関数がありますよ、
ExtractRelativePath 関数 で、相対パス→絶対パス
ExpandFileName 関数 で、その逆を行います。
ヘルプにありますので、みてみてください。
ただし、ExpandFileNameが展開時に基準とするパスはカレントフォルダです。
SetCurrentDirなどをつかって、一時的にでも目的のフォルダに変更してあげてください。
ちなみにわたしは、ChangeFileExt(Application.ExeName, '.ini') でやっていますが…。
何を勘違いしているんだろう(^_^;
上の、関数の説明が真逆になってます。
ExtractRelativePath 関数 は、絶対パス→相対パス ですね。
できたぁ。上記コードでChangeFileExt関数を使うやりかたでそのまま
読み込めばいいだけでした。たかみちえさん、通りすがりさん、
感謝です。また、勉強させてもらいたいと思いますので、気が向いたら
今後も面倒をみてやってください。では、失礼致します。
ツイート | ![]() |