有時候我們會有這樣的需求,我們需要取得相對於當前所在目錄的祖父兄弟目錄(暫且稱呼為叔公目錄)的絕對路徑,如果我們已經知道叔公目錄的絕對路徑永遠不變,當然就直接 Hard Code 取用就好,但是這種狀況是少之又少,大多數情況是整個家族目錄會因需要而搬家,在已知叔公目錄名稱的條件下,要得知叔公目錄的絕對路徑,我們可以這樣做,找到曾祖父目錄之後,把叔公目錄名稱合併在後面就可以了,而我們要怎麼用 C# 找到曾祖父目錄呢?
Path.GetDirectoryName
在 System.IO.Path 底下有一個 GetDirectoryName 的方法,是用來取得當前檔案或目錄的父目錄絕對路徑。
我們可以利用這個方法撰寫一個 GetUpLevelDirectory
的方法,方便我們可以想往上取幾個階層就取幾個階層。
private string GetUpLevelDirectory(string path, int upLevel)
{
var directory = File.GetAttributes(path).HasFlag(FileAttributes.Directory)
? path
: Path.GetDirectoryName(path);
upLevel = upLevel < 0 ? 0 : upLevel;
for (var i = 0; i < upLevel; i++)
{
directory = Path.GetDirectoryName(directory);
}
return directory;
}
Path.GetFullPath 加上 ..\
..\
是一個用來瀏覽上層路徑的方法,在檔案總管的路徑列上輸入一個 ..\ 可以瀏覽到上一層目錄,輸入兩個 ..\ 可以瀏覽到上兩層目錄。
這種瀏覽上層目錄的方式搭配 System.IO.Path 中的 GetFullPath 方法,也可以拿來幫助我們找到曾祖父目錄。
做法就是用 Path.Combine 方法,將 ..\ 合併到原所在目錄路徑的後面,要往上幾層就放幾個 ..\。