2014-03-25 142 views
9

当我有这样的目录路径:如何获取某个目录的父文件夹的路径?

C:\Program Files (x86)\Embarcadero\ 

我在寻找函数应该返回:

C:\Program Files (x86)\ 

我试过这个代码,但它仅适用于文件,而不是目录:

function GetParentDirectory(const Path: string): string; 
begin 
    Result := ExpandFileName(Path); 
end; 

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

回答

15

您可以使用两种方法:

从一个文件夹名称:

ExtractFilePath(ExcludeTrailingPathDelimiter('C:\Parent\Child\')); 

从文件名:

ExtractFilePath(ExcludeTrailingPathDelimiter(ExtractFilePath('C:\Parent\Child\app.exe'))); 
4

试试这个:

ExtractFileDir('C:\Path\Path2') gives 'C:\Path' 

注意

ExtractFileDir('C:\Path\Path2\') gives 'C:\Path\Path2' 

感谢TLama:

ExtractFileDir(ExcludeTrailingBackslash('C:\Path\Path2')) gives 'C:\Path' 
ExtractFileDir(ExcludeTrailingBackslash('C:\Path\Path2\')) gives 'C:\Path' 
+1

用户要求,将采取类似'C的输入功能:\ Program Files(x86)\ Embarcadero \\'并返回'C:\ Program Files(x86)\\'。你的函数返回'C:\ Program Files(x86)',因此不符合要求。你需要调用'ExtractFilePath'来代替'ExtractFileDir'。 –

9

在Delphi的新版本,你可以使用TDirectoryIOUtils

TDirectory.GetParent(ExcludeTrailingPathDelimiter(YourPath)) 
+2

为什么GetParent不处理分隔符,而不是要求用户键入那个非常长的函数名?从文档:“返回另一个目录的父目录。”如果期望传入目录,则尾随分隔符应该是不相关的。 – alcalde

+0

@alcalde * Path *和* Directory *(后面的PathDelimiter)之间有区别,它很重要 –

+0

@SirRufo,究竟有什么区别? – Vassilis

相关问题