.NET 应用练习 – 读取和写入文件

内容纲要

还可以使用 .NET 中的 File 类将数据写入文件以及从文件中读取数据。

你基本已完成为 Tailwind Traders 创建极佳 .NET 工具的操作。 到目前为止,你的代码能够读取所有目录,查找所有 .json 文件,并创建一个“totals.txt”文件。

在此练习中,你将读取 .json 文件,加总商店销售额,并将总额写入“totals.txt”文件。

将 Json.NET 添加到项目

使用终端将 Json.NET 添加到项目。

  1. dotnet add package Newtonsoft.Json

准备销售数据

在 Program.cs 顶部添加 using Newtonsoft.Json

  1. using Newtonsoft.Json;

在 FindFiles 方法下的 Program.cs 中,添加一个新的 record,它将对 sales.json 数据进行建模。

  1. record SalesData (double Total);

创建用于计算销售总额的方法

在 Program.cs 中,就在在上一步中添加的 record 行之前,创建一个新函数,用于计算销售总额。 此方法应采用它可以循环访问的文件路径的 IEnumerable<string>

  1. double CalculateSalesTotal(IEnumerable<string> salesFiles)
  2. {
  3. double salesTotal = 0;
  4. // READ FILES LOOP
  5. return salesTotal;
  6. }

在该方法中,将 // READ FILES LOOP 替换为循环访问 salesFiles 的循环、读取文件、将内容分析为 JSON,然后使用文件中的 total 值递增 salesTotal 变量。

  1. double CalculateSalesTotal(IEnumerable<string> salesFiles)
  2. {
  3. double salesTotal = 0;
  4. // Loop over each file path in salesFiles
  5. foreach (var file in salesFiles)
  6. {
  7. // Read the contents of the file
  8. string salesJson = File.ReadAllText(file);
  9. // Parse the contents as JSON
  10. SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
  11. // Add the amount found in the Total field to the salesTotal variable
  12. salesTotal += data?.Total ?? 0;
  13. }
  14. return salesTotal;
  15. }

调用 CalculateSalesTotals 方法

在 Program.cs 文件中,添加对 CalculateSalesTotal 函数的调用,就在 File.WriteAllText 调用的上方。

  1. var currentDirectory = Directory.GetCurrentDirectory();
  2. var storesDir = Path.Combine(currentDirectory, "stores");
  3. var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
  4. Directory.CreateDirectory(salesTotalDir);
  5. var salesFiles = FindFiles(storesDir);
  6. var salesTotal = CalculateSalesTotal(salesFiles); // Add this line of code
  7. File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);

将总额写入 totals.txt 文件

在 Program.cs 文件中,修改块 File.WriteAllText,将 salesTotal 变量的值写入“totals.txt”文件。 同时,将 File.WriteAllText 调用更改为 File.AppendAllText,这样可确保文件中的内容不会被覆盖。

  1. var currentDirectory = Directory.GetCurrentDirectory();
  2. var storesDir = Path.Combine(currentDirectory, "stores");
  3. var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
  4. Directory.CreateDirectory(salesTotalDir);
  5. var salesFiles = FindFiles(storesDir);
  6. var salesTotal = CalculateSalesTotal(salesFiles);
  7. File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");

按 Ctrl+S / Cmd+S 保存 Program.cs 文件。

运行程序

从终端运行程序。

  1. dotnet run

程序无输出。 如果查看 salesTotalDir/totals.txt 文件,会看到 sales.json 文件中所有销售的总额。

再次从终端运行程序。

  1. dotnet run

选择“salesTotalDir/totals.txt”文件。“totals.txt”文件现在有了第二行。 每次运行该程序时,都会再次加总总额,并在文件中写入新行。

非常棒! 你现在已编写了一个智能、可靠且方便的工具,Tailwind Traders 每晚都可以使用它来处理其所有商店销售额。 在下一单元中,我们将回顾你已学习的内容,并说明要记住的几个提示。

遇到困难了?

如果在此练习中遇到问题,可参考以下此项目的完整代码。

  1. using Newtonsoft.Json;
  2. var currentDirectory = Directory.GetCurrentDirectory();
  3. var storesDirectory = Path.Combine(currentDirectory, "stores");
  4. var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
  5. Directory.CreateDirectory(salesTotalDir);
  6. var salesFiles = FindFiles(storesDirectory);
  7. var salesTotal = CalculateSalesTotal(salesFiles);
  8. File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");
  9. IEnumerable<string> FindFiles(string folderName)
  10. {
  11. List<string> salesFiles = new List<string>();
  12. var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
  13. foreach (var file in foundFiles)
  14. {
  15. var extension = Path.GetExtension(file);
  16. if (extension == ".json")
  17. {
  18. salesFiles.Add(file);
  19. }
  20. }
  21. return salesFiles;
  22. }
  23. double CalculateSalesTotal(IEnumerable<string> salesFiles)
  24. {
  25. double salesTotal = 0;
  26. // Loop over each file path in salesFiles
  27. foreach (var file in salesFiles)
  28. {
  29. // Read the contents of the file
  30. string salesJson = File.ReadAllText(file);
  31. // Parse the contents as JSON
  32. SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
  33. // Add the amount found in the Total field to the salesTotal variable
  34. salesTotal += data?.Total ?? 0;
  35. }
  36. return salesTotal;
  37. }
  38. record SalesData (double Total);
.NET

.NET 应用中的读取和写入文件

2022-8-24 16:45:27

.NET

违背 C# 中 SOLID 原则的危险

2022-8-24 17:25:46

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
今日签到
私信列表
搜索