我正在使用以下代码:
str := ExtractFilePath(ParamStr(0)) + '\Connection.ini';
获取.ini
文件的路径,但是我想向上移动两个目录,因此.ini
文件不在DEBUG文件夹中。
我尝试过:
str := ExtractFilePath(ParamStr(0)) + '\..\..\Connection.ini';
但是没用...
答案 0 :(得分:1)
我使用此功能:
TYPE DirStr = STRING;
TYPE CpuWord = Cardinal;
FUNCTION EXECPATH : DirStr;
BEGIN
Result:=IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))
END;
FUNCTION XPATH : DirStr;
VAR
P : CpuWord;
BEGIN
Result:=EXECPATH;
{$IFDEF WINDOWS }
{$IFDEF CPU64BITS }
P:=POS('\WIN64\',UpperCase(Result));
{$ELSE }
P:=POS('\WIN32\',UpperCase(Result));
{$ENDIF }
IF P>0 THEN SetLength(Result,P)
{$ENDIF }
END;
这样,当从IDE 进行编译时,文件位于默认目录中时,以及从安装目录运行时,都将起作用。
如果要让.EXE文件驻留的 true 目录,请使用EXECPATH,而XPATH是您要的“ logical ”目录(即,如果位于\ Win32中),请使用EXECPATH \ Debug之类,请跳出这个步骤。)
答案 1 :(得分:1)
有很多可能性可以建立一个目录。其中一些包括:
str := ExtractFilePath(ExtractFilePath(ParamStr(0))) + '\Connection.ini';
或
str := IncludeTrailingPathDelimiter(ExtractFilePath(ExtractFilePath(ParamStr(0)))) + 'Connection.ini';
或
str := ExtractFilePath(ParamStr(0)) + '\..\Connection.ini';
答案 2 :(得分:0)
根据 Ondrej 的回答,我使用了这个方法:
function GetParentFolder(folder: String; const cLevels: BYTE = 1) : String;
var
parent: String;
level: BYTE;
begin
// Given "C:\Parent\Child\" or "C:\Parent\Child\MyFile.txt", return "C:\Parent\"
if (cLevels > 0) then
begin
parent := ExcludeTrailingPathDelimiter(folder);
level := 0;
while (level < cLevels) do
begin
parent := ExcludeTrailingPathDelimiter(ExtractFileDir(ExtractFilePath(parent)));
Inc(level);
end;
Result := IncludeTrailingPathDelimiter(parent);
end
else
Result := folder;
end;
像这样使用它:
str := GetParentFolder(ParamStr(0), 2) + 'Connection.ini';
IMO 的优势在于,它适用于完整路径或仅适用于目录(没有文件名)。此外,您可以根据需要向上导航任意数量的级别。