.NET 包含用于使用文件系统的内置类型,可在 System.IO
命名空间找到这些类型。
现在,你将了解 System.IO
中的类型,使用 C# 来读取文件系统,以查找文件和目录。
场景
大型零售商通常会将数据写入文件,以便以后可以批量处理。
Tailwind Traders 的每个商店都将销售总额写入一个文件中,并将该文件发送到一个中心位置。 若要使用这些文件,公司需要创建可以使用文件系统的批处理进程。
包含 System.IO 命名空间
System.IO 命名空间包含内置类型,可让你与文件和目录进行交互。 例如,可以 get
和 set
文件和目录的属性,并根据搜索条件检索文件和目录集合。 还可使用 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.EnumerateDirectories
和 Directory.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 文件。