我有一个执行的Delphi应用程序,并且当我调用
GetCurrentDir
时,会返回以下内容:
当我调用C:\dev\w32\2015\BCSLBDemo\Win32\Debug
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;
我写了这个函数以获取所需的结果。我想知道是否有更好的方法来检索 Delphi 可执行文件的根目录。
ExtractFileDir(ParamStr(0))
来获取包含可执行文件的目录。如果要上升两个目录,则可以使用ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0))))
。但是为什么要向上跨越两个目录?这似乎很奇怪。如果你想获得更好的帮助,那么你应该解释一下你将如何使用这些信息。 - David HeffernanBCSLBDemo
是您的项目根目录,而不是您的可执行文件根目录。您的可执行文件正在从Win32\Debug
文件夹运行,因为该项目已配置为输出它创建的可执行文件。可执行文件没有关于项目的概念。那么,您真正想通过让可执行文件找到项目根目录来实现什么目的?它将如何处理该路径? - Remy Lebeau