以 .NET 處理檔案路徑
.NET 具有可處理檔案系統路徑的內建機制。
在上一個練習中,沒有太多資料夾需要剖析。 如果您的檔案系統有許多檔案和資料夾,則手動建置路徑會是相當繁瑣的過程。 幸好,.NET 提供了一些內建的常數與公用程式函式,可讓您更方便地處理檔案路徑。
在這裡,您會了解 System.IO
命名空間與 System.Environment
類型中的一些常數與公用程式函式,來使程式變得更加聰明且更具復原性。
判斷目前的目錄
有時候,您不知道程式應該在哪一個目錄或路徑中執行。 讓我們這麼假設,您希望程式使用目前的目錄,但您不知道路徑為何。
.NET 會透過 Directory.GetCurrentDirectory
方法公開目前目錄的完整路徑。
Console.WriteLine(Directory.GetCurrentDirectory());
如果您從下列結構中的 201 資料夾執行上述程式碼,則 Directory.GetCurrentDirectory()
會傳回 stores\201
:
📂 stores
📂 201
處理特殊目錄
.NET 可在任何地方執行:在 Windows 上、macOS 上、Linux 上,甚至是在 iOS 和 Android 等行動裝置作業系統上。 每個作業系統不一定會有特殊系統資料夾的概念,例如主目錄 (專用於使用者特定檔案) 或桌面目錄,或是用來儲存暫存檔案的目錄。
這些類型的特殊目錄會隨作業系統而異。 想要記住每個作業系統的目錄結構,並根據目前的 OS 執行切換,將會是很麻煩的工作。
System.Environment.SpecialFolder
列舉會指定常數,用來擷取特殊系統資料夾的路徑。
下列程式碼會傳回任何作業系統中,等同於 Windows My Documents 資料夾或使用者 HOME 目錄的路徑 (即使程式碼是在 Linux 上執行也一樣):
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
使用路徑
路徑是經常出現的主體,.NET 包含稱為 Path
的類別,專門用來處理路徑。
Path
類別位於 .NET 的 System.IO
命名空間中,因此不需要另行安裝。
特殊路徑字元
不同作業系統會使用不同的字元來分隔目錄層級。
例如,Windows 使用反斜線 (stores\201
),而 macOS 使用正斜線 (stores/201
)。
為了協助您使用正確的字元,Path
類別包含 DirectorySeparatorChar
欄位。
需要手動建置路徑時,.NET 會自動將該欄位解譯為該作業系統適用的分隔符號字元。
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
聯結路徑
Path
類別可處理單純為字串的檔案與資料夾路徑概念。 您可以使用 Path
類別來自動地針對特定作業系統建置正確的路徑。
例如,如果想要取得 stores/201 資料夾的路徑,即可使用 Path.Combine
函式來執行此作業。
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
請記住,您之所以會使用 Path.Combine
或 Path.DirectorySeparatorChar
類別而不是將字串寫入程式碼,是因為程式可能會在許多不同的作業系統上執行。 Path
類別一律會為其執行所在的作業系統正確設定路徑的格式。
提示
Path
類別無法判斷內容是否實際存在。 路徑是概念性的存在,而非實際存在,此類別會為您建置和剖析字串。
判斷副檔名
Path
類別也可為您指出檔案的副檔名。 如果想要知道某個檔案是否為 JSON 檔案,則可使用 Path.GetExtension
函式。
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
取得了解檔案或路徑所需的所有資訊
Path
類別包含許多不同的方法,這些方法可執行各種動作。 您可分別使用 DirectoryInfo
或 FileInfo
類別,以取得目錄或檔案的最多相關資訊。
string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";
FileInfo info = new FileInfo(fileName);
Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more
Path
、DirectoryInfo
及 FileInfo
類別中還有許多實用的屬性和公用程式方法,但是這些核心概念可能是您最常使用的概念。 在下一個練習中,您將撰寫路徑及識別 .json 檔案。