2014-03-25 191 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

相關問題