Delphi使用ExtractFilePath进入目录

时间:2019-05-16 11:28:39

标签: delphi

我正在使用以下代码:

str := ExtractFilePath(ParamStr(0)) + '\Connection.ini';

获取.ini文件的路径,但是我想向上移动两个目录,因此.ini文件不在DEBUG文件夹中。

我尝试过:

str := ExtractFilePath(ParamStr(0)) + '\..\..\Connection.ini';

但是没用...

3 个答案:

答案 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 的优势在于,它适用于完整路径或仅适用于目录(没有文件名)。此外,您可以根据需要向上导航任意数量的级别。