Return Delphi 可执行文件的根目录

Return the root directory of Delphi executable

我有一个 Delphi 应用程序正在执行,当我调用 GetCurrentDir 时 returns:

C:\dev\w3215\BCSLBDemo\Win32\Debug

当我打电话给 ExtractFileDir(GetCurrentDir()) 时,我收到以下信息:

C:\dev\w3215\BCSLBDemo\Win32

我想要的是C:\dev\w3215\BCSLBDemo

function RetRoot: string;
var
  i: Integer;
  buf: string;
begin
  Result := '';
  buf := ExtractFileDir(GetCurrentDir());
  i := Length(buf);
  repeat
    dec(i);
  until (buf[i] = '\') or (i < 3);
  if buf[i] = '\' then
  begin
    Delete(buf, i, Length(buf));
    Result := buf;
  end;
end;

我写这个函数是为了得到想要的结果。我想知道是否有更好的方法来完成检索 Delphi 可执行文件的根目录。

您可以使用以下方法获取应用程序可执行文件的完整路径:

ParamStr(0);

对于基于表单的应用程序,您还可以使用 Application 对象:

Application.ExeName;

获取不带文件名的文件路径,可以考虑使用ExtractFileDir or ExtractFilePath.

两者的区别在于,ExtractFilePath 返回带有最后一个分隔符(/\)的路径,而 ExtractFileDir 截断它。


David Heffernan's 中所述,多次调用 ExtractFileDir 允许获取父目录:

拥有 C:\dev\w3215\BCSLBDemo\Win32\Debug\Project1.exe 你可以获得 C:\dev\w3215\BCSLBDemo 这样的:

ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0))));

还有一个方法:

ExpandFileName(GetCurrentDir + '\..\..\'); // Current folder
ExpandFileName(ExtractFileDir(Application.ExeName) + '\..\..\'); // Exe folder

C:\dev\w3215\BCSLBDemo

如您所见,将把您提升两个级别。

当然这只能回答"how to get 2 levels up"的问题。关于 Exe root 的问题有点胡说八道。您可能只需要将您的项目设置配置为不创建 Win32\Debug 文件夹或将您的数据文件移动到那里 ;-)

您可以使用以下方法获取应用程序可执行文件的完整路径:

Delphi 2010 申报用途 软件系统;

Delphi Xe declare Uses IW系统;

showmessage(gsAppPath);

您可以使用 $(运行)(运行时变量):

function Get_AppPath: string;
begin
  Result := ExtractFilePath(TPath.GetFullPath('$(RUN)'));
end;