如何获取某个目录的父文件夹的路径?

jwz*_*104 10 delphi

当我有这个目录路径时:

C:\Program Files (x86)\Embarcadero\
Run Code Online (Sandbox Code Playgroud)

我正在寻找的功能应该返回:

C:\Program Files (x86)\
Run Code Online (Sandbox Code Playgroud)

我试过这段代码,但它只适用于文件,不适用于目录:

function GetParentDirectory(const Path: string): string;
begin
  Result := ExpandFileName(Path);
end;
Run Code Online (Sandbox Code Playgroud)

有谁知道我应该使用什么来返回某个目录的父文件夹的路径?

Ken*_*ite 17

您可以使用以下几种方式:

从文件夹名称:

ExtractFilePath(ExcludeTrailingPathDelimiter('C:\Parent\Child\'));
Run Code Online (Sandbox Code Playgroud)

从文件名:

ExtractFilePath(ExcludeTrailingPathDelimiter(ExtractFilePath('C:\Parent\Child\app.exe')));
Run Code Online (Sandbox Code Playgroud)


Agu*_*ert 12

在较新版本的delphi中,您可以使用TDirectoryfromIOUtils

TDirectory.GetParent(ExcludeTrailingPathDelimiter(YourPath))
Run Code Online (Sandbox Code Playgroud)

  • 为什么GetParent不处理分隔符而不是要求用户键入那么长的函数名?从文档:"返回另一个目录的父目录." 如果它期望在目录中传递,那么尾随分隔符应该是无关紧要的. (3认同)

Gab*_*elF 5

尝试这个:

ExtractFileDir('C:\Path\Path2') gives 'C:\Path'
Run Code Online (Sandbox Code Playgroud)

注意

ExtractFileDir('C:\Path\Path2\') gives 'C:\Path\Path2'
Run Code Online (Sandbox Code Playgroud)

感谢TLama:

ExtractFileDir(ExcludeTrailingBackslash('C:\Path\Path2')) gives 'C:\Path'
ExtractFileDir(ExcludeTrailingBackslash('C:\Path\Path2\')) gives 'C:\Path'
Run Code Online (Sandbox Code Playgroud)

  • 用户请求一个函数,该函数将接受“C:\Program Files (x86)\Embarcadero\\”等输入并返回“C:\Program Files (x86)\\”。您的函数返回“C:\Program Files (x86)”,因此不满足要求。您需要调用“ExtractFilePath”,而不是“ExtractFileDir”。 (2认同)