處理檔案系統

已完成

.NET 包含內建類型,可用來處理在 System.IO 命名空間中找到的檔案系統。

您將在這裡了解如何透過 C# 使用 System.IO 中的類型,讀取檔案系統以探索檔案和目錄。

案例

大型零售商通常會將資料寫入檔案,以便後續以批次方式處理。

Tailwind Traders 的每間商店都會將其銷售總額寫入檔案,並將該檔案傳送到中央位置。 若要使用這些檔案,公司必須建立可與檔案系統搭配使用的批次程序。

包含 System.IO 命名空間

System.IO 命名空間包含內建類型,可讓您與檔案和目錄互動。 例如,您可以使用檔案和目錄的 getset 屬性,並根據搜尋準則擷取檔案和目錄的集合。 您也可以使用 System.IO 命名空間類型,同步和非同步讀取和寫入資料流和檔案。

現在,我們將著重在使用 System.IO 命名空間所含 Directory 類別來處理目錄時必須要知道的事項。 Directory 類別公開建立、移動和全面列舉目錄和子目錄的靜態方法。

列出所有目錄

Directory 類別通常用於列出 (或列舉) 目錄。 例如,Tailwind Traders 檔案結構有一個名為 stores 的根資料夾。 該資料夾中包含依商店編號組織的子資料夾,而這些子資料夾內具有銷售總額和庫存檔案。 結構會此範例所示:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

若要讀取並列出最上層目錄的名稱,則可使用 Directory.EnumerateDirectories 函式。

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

列出特定目錄中的檔案

若要列出目錄中所有檔案的名稱,則可使用 Directory.EnumerateFiles 函式。

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

列出目錄與所有子目錄中的所有內容

Directory.EnumerateDirectoriesDirectory.EnumerateFiles 函式都具有多載,其可接受參數來指定檔案與目錄必須符合的搜尋模式。

這些函式還有另一個多載,其可接受參數以指示是否要以遞迴方式周遊指定的資料夾與其所有子資料夾。

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

在下一個練習中,您將使用 Directory 類別,以動態方式讀取 Tailwind Traders 的主要 stores 目錄,以尋找所有 sales.json 檔案。

檢定您的知識

1.

您可以使用 Directory.EnumerateFiles 來處理下列哪一個工作?