EXEと同じフォルダから特定のテキストファイルを取得するには?

解決


太郎衛門  2003-12-11 20:52:48  No: 6069  IP: [192.*.*.*]

実行ファイルと同じフォルダから、def.txtというファイルを取得して、読み込ませたいのですが、どうしたらよろしいのでしょうか?

編集    削除
にしの  2003-12-11 20:55:36  No: 6070  IP: [192.*.*.*]

Application.ExeNameに、アプリケーションのフルパスが入っています。
ExtractFilePathを使うと、例えば
C:\project\test\abc.exe
であれば、
C:\project\test\
を返します。
詳しくはヘルプを参照。
ExtractFilePathの他にも、便利な関数がたくさんあります。

編集    削除
通りすがり  2003-12-11 20:58:40  No: 6071  IP: [192.*.*.*]

FileName := ExtractFilePath(ParamStr(0))+'def.txt';
とか
FileName := ExtractFilePath(Application.ExeName)+'def.txt';
とかでしょうか。

編集    削除
太郎衛門  2003-12-12 04:41:19  No: 6072  IP: [192.*.*.*]

ありがとうございます。取得できました。
その代わり別の問題が発生したので、質問よろしいでしょうか。

var
  Form1: TForm1;
  def_file: Tstringlist;
  implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
FileName :string;
begin
FileName := ExtractFilePath(Application.ExeName)+'def.txt';
def_file.LoadFromFile(filename);
end;

end.

と記述し、コンパイルしたら
def_file.LoadFromFile(filename);
の部分でEaccessViolationクラスの例外を生成しましたとエラーが出てしまいます。原因が、まったく分かりません。どうすればいいのでしょうか。

編集    削除
Halbow  2003-12-12 04:58:06  No: 6073  IP: [192.*.*.*]

Halbow です。

> def_file.LoadFromFile(filename);
> の部分でEaccessViolationクラスの例外を生成しましたとエラーが出てしまいます。

def_file は TStringLIst クラスの変数ですから、コンストラクタをつかって
インスタンスを作成しないと使えません。

procedure TForm1.FormCreate(Sender: TObject);
var
  FileName :string;
begin
  FileName := ExtractFilePath(Application.ExeName)+'def.txt';
  def_file := TStringList.Create; // ここで生成
  try
    def_file.LoadFromFile(filename);
    // ここで def_file を使った処理
  finally
    def_file.Free; // ここで破棄
  end;
end;

編集    削除
太郎衛門  2003-12-12 05:02:59  No: 6074  IP: [192.*.*.*]

Halbowさんありがとうございます。
無事解決しました。

編集    削除