Ejercicio: Lectura de archivos y escritura en ellos
- Use el terminal para agregar Json.NET al proyecto.
dotnet add package Newtonsoft.Json
- En la parte superior de
Program.cs
, agregueusing Newtonsoft.Json
:
using Newtonsoft.Json;
En Program.cs
, directamente debajo del método FindFiles
, agregue un nuevo objeto record
que modelará los datos de sales.json
:
record SalesData (double Total);
- En
Program.cs
, justo antes de la línearecord
que agregó en el paso anterior, cree una función que calculará el total de ventas. Este método debe tomar unIEnumerable<string>
de rutas de acceso de archivo en el que pueda iterar.
double CalculateSalesTotal(IEnumerable<string> salesFiles)
{
double salesTotal = 0;
// READ FILES LOOP
return salesTotal;
}
En este método, reemplace // READ FILES LOOP
por un bucle que itere en salesFiles
, lea el archivo, analice el contenido como JSON y, después, aumente la variable salesTotal
con el valor total
del archivo:
double CalculateSalesTotal(IEnumerable<string> salesFiles)
{
double salesTotal = 0;
// Loop over each file path in salesFiles
foreach (var file in salesFiles)
{
// Read the contents of the file
string salesJson = File.ReadAllText(file);
// Parse the contents as JSON
SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
// Add the amount found in the Total field to the salesTotal variable
salesTotal += data?.Total ?? 0;
}
return salesTotal;
}
- En el archivo
Program.cs
, agregue una llamada a la funciónCalculateSalesTotal
justo encima de la llamada aFile.WriteAllText
:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDir = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDir);
var salesTotal = CalculateSalesTotal(salesFiles); // Add this line of code
File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
- En el archivo
Program.cs
, modifique el bloqueFile.WriteAllText
para escribir el valor de la variablesalesTotal
en el archivo totals.txt. Durante el proceso, cambie la llamadaFile.WriteAllText
aFile.AppendAllText
para que no se sobrescriba nada en el archivo.
var currentDirectory = Directory.GetCurrentDirectory();
var storesDir = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDir);
var salesTotal = CalculateSalesTotal(salesFiles);
File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");
- Ejecute el programa desde el terminal:
dotnet run
Vuelva a ejecutar el programa desde el terminal.
dotnet run
-
Seleccione el archivo salesTotalDir/totals.txt.
El archivo totals.txt ahora tiene una segunda línea. Cada vez que el programa se ejecute, los totales se volverán a sumar y se escribirá una nueva línea en el archivo.