可以使用 .NET 查找并返回有关文件和文件夹的信息。
Tailwind Traders 在世界各地有许多实体商店。 每天晚上,每个商店都要创建一个名为 sales.json 的文件,其中包含当天所有销售额的总计。 这些文件在文件夹中按商店 ID 进行组织。
备注
本模块使用 .NET CLI(命令行接口)和 Visual Studio Code 进行本地开发。 完成本模块后,你可使用 Visual Studio (Windows)、Visual Studio for Mac (macOS) 等开发环境来应用其概念,或使用 Visual Studio Code(Windows、Linux 和 macOS)进行持续开发。
此模块使用 .NET 6.0 SDK。 通过在首选终端中运行以下命令,确保你已安装 .NET 6.0:
dotnet --list-sdks
将显示类似于下面的输出:
3.1.100 [C:\program files\dotnet\sdk]
5.0.100 [C:\program files\dotnet\sdk]
6.0.100 [C:\program files\dotnet\sdk]
确保列出了以 6
开头的版本。 如果未列出任何版本或未找到命令,请安装最新的 .NET 6.0 SDK。
克隆项目
此练习将编写一个 .NET 程序,该程序在名为 sales.json 的文件中搜索目录及其子目录。
我们已为你创建了一个初学者项目。 你需使用 Visual Studio Code 中的集成终端克隆Visual Studio Code。
打开 Visual Studio Code。
在主菜单中,选择“视图”>“终端”以打开“终端”窗口。
(可选)在“终端”窗口中,更改为要将文件复制到的目录,例如 c:\MyProjects
。
在“终端”窗口中,运行以下命令克隆初学者项目并转到克隆的项目:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
运行以下命令以创建新的 .NET 控制台项目:
dotnet new console -f net6.0 -n mslearn-dotnet-files -o .
运行以下命令,在同一个 Visual Studio Code 实例中打开新的 .NET 项目:
code -a .
提示
此时 Visual Studio Code 可能会提示你生成和运行该项目所需的资产已丢失。
选择带有感叹号的三角形,然后选择“重新启动终端”,添加允许 Visual Studio Code 运行和调试项目的文件。
在“资源管理器”窗口中 的“mslearn-dotnet-files”下,展开“stores”文件夹和其中每个带编号的文件夹。
查找 sales.json 文件
以下任务将创建一个程序,以查找 mslearn-dotnet-files
项目的所有文件夹中的所有 sales.json 文件。
包含 System.IO 命名空间
在资源管理器窗口中,选择 Program.cs
文件以在编辑器中打开它。
将以下代码粘贴到 Program.cs
文件的第一行,导入 System.IO
和 System.Collections.Generic
命名空间:
using System.IO;
using System.Collections.Generic;
备注
从 .NET 6 开始,上述代码中的两个语句会自动通过
ImplcitUsings
属性组包含在新项目中。 因为我们在创建新的控制台项目时指定了-f net6.0
标志,所以它们将被隐式添加。 但是,如果使用的是较旧的项目,则需要将其包含在Program.cs
文件中,如果将其保留在该文件中,就不会影响此项目。
编写用于查找 sales.json 文件的函数
创建一个名为 FindFiles
的新函数,该函数采用 folderName
参数。
将 Console.WriteLine("Hello, World!"); 行替换为以下代码:
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}
在 using
语句下面插入以下代码以调用 FindFiles
函数。 此代码会传入“stores”文件夹名称作为文件的搜索位置。
var salesFiles = FindFiles("stores");
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
按 Ctrl+S(在 macOS 上则按 Cmd+S)保存 Program.cs
文件。
运行程序
在终端窗口中输入以下命令以运行程序:
dotnet run
程序应显示以下输出:
stores/sales.json
stores/201/sales.json
stores/202/sales.json
stores/203/sales.json
stores/204/sales.json
很好! 你已成功编写了一个命令行工具,该工具将遍历 stores
目录中的所有文件夹并列出找到的所有“sales.json”文件。
在此示例中,“stores”目录的路径非常简单,并且位于程序的工作目录中。 在下一单元中,你将学习如何使用 Path
类构造在操作系统上使用的复杂结构。
遇到困难了?
如果在运行程序时遇到任何问题,下面是 Program.cs
文件已完成的代码。 将 Program.cs
文件的内容替换为以下代码:
var salesFiles = FindFiles("stores");
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}
6