相対パスで指定すると、Iniファイルが作成されません

解決


ムキー  2004-03-06 05:32:11  No: 7584

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ファイルが作成されます。

普通のテキストファイルとかを読み込むときも相対パスだと書き込めなかった経験があります。参考書を見ると、普通に相対パスで特に断りもなく書かれているのですが、何か設定が必要なのでしょうか?ご回答よろしくお願い致します。


ふぐちゃん  2004-03-06 06:29:07  No: 7585

TIniFileのCreateはAPIのGetPrivateProfileString関数を
利用しているのですが、この関数はファイル名にフルパスが
指定されていないとWindowsディレクトリにINIファイルを
作成してしまいます。
絶対パスで指定すべきでしょう。

> 普通のテキストファイルとかを読み込むときも相対パスだと
> 書き込めなかった経験があります。
カレントディレクトリはTOpenDialog等で変更されますので、
この場合も相対パスは避けるべきです。


ムキー  2004-03-06 07:25:27  No: 7586

ふぐちゃんさん、どうもありがとうございます。
WINNTフォルダを見たらさりげなく作成されていました(^_^;)。
しかし、プログラムを配布する場合、ユーザーがどのフォルダにアプリケーションをコピーするかわからないので、どうやって絶対パスを書いておけばいいんでしょうか?ちょっと想像がつきません。


通りすがり  2004-03-06 08:42:22  No: 7587

Application.ExeName
ExtractFilePath
等をヘルプで調べるといいかも。


通りすがり  2004-03-06 08:44:41  No: 7588

ExtractFilePathは関係ないか^^;


たかみちえ  URL  2004-03-06 09:13:00  No: 7589

相対パスと絶対パスを相互変換する関数がありますよ、
ExtractRelativePath 関数 で、相対パス→絶対パス
ExpandFileName 関数 で、その逆を行います。
ヘルプにありますので、みてみてください。

  ただし、ExpandFileNameが展開時に基準とするパスはカレントフォルダです。
SetCurrentDirなどをつかって、一時的にでも目的のフォルダに変更してあげてください。

  ちなみにわたしは、ChangeFileExt(Application.ExeName, '.ini') でやっていますが…。


たかみちえ  URL  2004-03-06 09:14:36  No: 7590

何を勘違いしているんだろう(^_^;
上の、関数の説明が真逆になってます。
ExtractRelativePath 関数 は、絶対パス→相対パス ですね。


ムキー  2004-03-06 10:52:09  No: 7591

できたぁ。上記コードでChangeFileExt関数を使うやりかたでそのまま
読み込めばいいだけでした。たかみちえさん、通りすがりさん、
感謝です。また、勉強させてもらいたいと思いますので、気が向いたら
今後も面倒をみてやってください。では、失礼致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加