.NET Path
类和 Directory.GetCurrentDirectory
是用于定义和编写文件系统路径的两种方法。
在上一练习中,你编写了一个程序,该程序循环访问文件夹以查找文件夹内或任何子文件夹内的任何“sales.json”文件。
本练习将使用 Path
类和 Directory.GetCurrentDirectory
来改进该程序,以便它找到扩展名为 .json 的所有文件。
使用当前目录并合并路径
在当前的 Program.cs 代码中,需要传递“store”文件夹的静态位置。 将此代码更改为使用 Directory.GetCurrentDirectory
值,而不是传递静态文件夹名称。
在编辑器中,在 Program.cs
文件的第一行上方插入以下代码。 此代码使用 Directory.GetCurrentDirectory
方法获取当前目录的路径,并将其存储在新变量 currentDirectory
中:
var currentDirectory = Directory.GetCurrentDirectory();
在刚添加的代码后插入以下代码。 此代码使用 Path.Combine
方法创建商店目录的完整路径,并将其存储在新变量 storesDirectory
中:
var storesDirectory = Path.Combine(currentDirectory, "stores");
将 FindFiles
函数中的 stores
变量替换为新变量 storesDirectory
:
var salesFiles = FindFiles(storesDirectory);
文件顶部现在应类似于以下代码片段:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesFiles = FindFiles(storesDirectory);
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
按 Ctrl+S(在 macOS 上则按 Cmd+S)保存 文件。
从命令行运行程序:
dotnet run
程序应显示以下输出:
/home/username/dotnet-files/stores/sales.json
/home/username/dotnet-files/stores/201/sales.json
/home/username/dotnet-files/stores/202/sales.json
/home/username/dotnet-files/stores/203/sales.json
/home/username/dotnet-files/stores/204/sales.json
请注意,返回的文件名包括完整的系统路径。 包括此路径的原因是 Directory.GetCurrentDirectory
方法返回当前位置的完整路径。
查找所有 .json 文件
此程序需要搜索扩展名为“.json”的任何文件,而不是只查找 sales.json 文件。 为此,请使用 Path.GetExtension
方法检查每个文件的扩展名。
在 foundFiles
中的 foreach
循环中,在 if
语句上方插入以下代码行以定义新变量 extension
。 此代码使用 Path.GetExtension
方法获取每个文件的扩展名。
var extension = Path.GetExtension(file);
更改 if
语句,使其看起来像下面的代码行。 此语句检查文件的扩展名是否为 .json。
if (extension == ".json")
循环应如下所示:
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
按 Ctrl+S / Cmd+S 保存文件。
从命令行运行程序:
dotnet run
现在,输出内容将显示每个存储 ID 目录中的所有 .json 文件:
/home/username/dotnet-files/stores/sales.json
/home/username/dotnet-files/stores/201/sales.json
/home/username/dotnet-files/stores/201/salestotals.json
/home/username/dotnet-files/stores/202/sales.json
/home/username/dotnet-files/stores/202/salestotals.json
/home/username/dotnet-files/stores/203/sales.json
/home/username/dotnet-files/stores/203/salestotals.json
/home/username/dotnet-files/stores/204/sales.json
/home/username/dotnet-files/stores/204/salestotals.json
太棒了! 你已使用 Path
类和 Directory.GetCurrentDirectory
方法让程序变得更可靠。 在下一单元中,你将了解如何创建目录和在不同位置之间移动文件。
遇到困难了?
如果在此练习中遇到任何问题,可参考下面的完整代码。 删除 Program.cs 中的所有内容,并将其替换为此解决方案:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesFiles = FindFiles(storesDirectory);
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)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}