[小菜一碟] 取得往上第 n 個階層的目錄路徑

有時候我們會有這樣的需求,我們需要取得相對於當前所在目錄的祖父兄弟目錄(暫且稱呼為叔公目錄)的絕對路徑,如果我們已經知道叔公目錄的絕對路徑永遠不變,當然就直接 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 方法,將 ..\ 合併到原所在目錄路徑的後面,要往上幾層就放幾個 ..\。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學