Arc*_*oks 2 delphi directory root delphi-xe8
我有一个Delphi应用程序正在执行,当我调用GetCurrentDir以下返回时:
C:\ dev的\ W32\2015年\ BCSLBDemo\WIN32 \调试
当我打电话时,ExtractFileDir(GetCurrentDir())我收到以下内容:
C:\ dev的\ W32\2015年\ BCSLBDemo\WIN32
我想要的是什么 C:\dev\w32\2015\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;
Run Code Online (Sandbox Code Playgroud)
我写了这个函数来得到想要的结果.我想知道是否有更好的方法来完成检索Delphi可执行文件的根目录.
您可以使用以下命令获取应用程序可执行文件的完整路
ParamStr(0);
Run Code Online (Sandbox Code Playgroud)
对于基于表单的应用程序,您还有Application可用的对象:
Application.ExeName;
Run Code Online (Sandbox Code Playgroud)
要获取没有文件名的文件路径,可以考虑使用ExtractFileDir或ExtractFilePath.
两者之间的区别在于ExtractFilePath使用最后一个分隔符(/或\)返回路径并ExtractFileDir截断它.
正如David Heffernan的评论中所述,多次调用ExtractFileDir允许获取父目录:
有C:\dev\w32\2015\BCSLBDemo\Win32\Debug\Project1.exe,你可以得到C:\dev\w32\2015\BCSLBDemo这样的:
ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0))));
Run Code Online (Sandbox Code Playgroud)
还有另一种方式:
ExpandFileName(GetCurrentDir + '\..\..\'); // Current folder
ExpandFileName(ExtractFileDir(Application.ExeName) + '\..\..\'); // Exe folder
Run Code Online (Sandbox Code Playgroud)
C:\ dev的\ W32\2015年\ BCSLBDemo
如你所见,你会带两个级别.
当然这只回答了"如何获得2级"问题.关于Exe root的问题有点无意义.您可能只需要将项目设置配置为不创建Win32\Debug文件夹或将数据文件移动到那里;-)