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;
我有一个 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;