使用文件系统

已完成

.NET 包含用于使用文件系统的内置类型,可在 System.IO 命名空间找到这些类型。

现在,你将了解 System.IO 中的类型,方法是使用 C# 来读取文件系统,以发现文件和目录。

场景

大型零售商通常会将数据写入文件,以便以后可以批量处理。

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 执行以下哪一项任务?