不要告诉我用getcurrentdir,因为getcurrentdir获得的是系统当前的目录,若是在程序中使用了opendialog之类的东西之后,用getcurrentdir获得的目录就变成了刚刚opendialog打开后的那个目录。
有什么方法能够获得程序运行所在的目录而不受opendialog之类的东西的影响?

解决方案 »

  1.   

    //可以看到这个实例子
    procedure TForm1.Save1Click(Sender: TObject);var
      NewFileName: string;
      Msg: string;
      NewFile: TFileStream;
      OldFile: TFileStream;
    begin
      NewFileName := ExtractFilePath(Application.ExeName) + ExtractFileName(Edit1.Text);
      Msg := Format('Copy %s to %s?', [Edit1.Text, NewFileName]);
      if MessageDlg(Msg, mtConfirmation, mbOKCancel, 0) = mrOK then
      begin
        OldFile := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
        try
          NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);      try
            NewFile.CopyFrom(OldFile, OldFile.Size);
          finally
            FreeAndNil(NewFile);
          end;
        finally
          FreeAndNil(OldFile);
        end;
      end;end;
      

  2.   

    用ExtractFilePath(Application.ExeName);
    这是取得可执行程序的路径,相当于d:\project\
    最后一个字符是'\',
    用GetCurrentdir();是取得的当前活动目录,
    有时用这个可以正常运行,因为你在程序运行中没有对其它目录进行操作,
    如果你在程序运行时对其它目录进行操作的话,
    这个程序,肯定出错。