Øvelse – Lese og skrive til filer
Du kan også bruke File-klassen i .NET til å skrive data til filer og lese data fra filer.
Du er nesten ferdig med å opprette et .NET-mesterverk for Tailwind Traders. Så langt leser koden en hvilken som helst katalog, finner alle .json filer og oppretter en totals.txt fil.
I denne øvelsen fullfører du prosjektet ved å lese .json filer, legge sammen totalsummene for butikken og skrive totalsummen til totals.txt-filen.
Legg til Newtonsoft.Json i prosjektet
Bruk terminalen til å legge newtonsoft.Json til prosjektet.
dotnet add package Newtonsoft.Json
Klargjøre for salgsdata
Legg til
Program.csøverst iusing Newtonsoft.Json:using Newtonsoft.Json;I
Program.csrett underFindFilesmetoden legge til en nyrecordsom modellerer de sales.json dataene:record SalesData (double Total);
Opprett en metode som beregner salgssummer
I
Program.cs, like før denrecordlinjen du la til i forrige trinn, oppretter du en ny funksjon som beregner salgssummen. Denne metoden bør ta enIEnumerable<string>med filbaner som den kan gjentakelse over.double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // READ FILES LOOP return salesTotal; }Innenfor denne metoden erstatter du
// READ FILES LOOPmed en løkke som gjentas oversalesFiles, leser filen, analyserer innholdet som JSON og øker derettersalesTotalvariabelen med dentotalverdien fra filen: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; }
Kall calculateSalesTotals-metoden
Legg til et kall i
Program.cs-funksjonen like overCalculateSalesTotalanropet iFile.WriteAllText-filen: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);
Skriv totalsummen til totals.txt-filen
Endre
Program.csblokk iFile.WriteAllText-filen for å skrive verdien tilsalesTotalvariabelen til totals.txt filen. Mens du er i bruk, endrer duFile.WriteAllTextkall tilFile.AppendAllTextslik at ingenting i filen blir overskrevet.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}");Lagre Program.cs filen ved å trykke CTRL+S / Cmd+S.
Kjør programmet
Kjør programmet fra terminalen:
dotnet runDet er ingen utdata fra programmet. Hvis du ser i salesTotalDir/totals.txt-filen, finner du summen av alle salgene fra sales.json filen.
Kjør programmet fra terminalen på nytt.
dotnet runVelg filen salesTotalDir/totals.txt.
Den totals.txt filen har nå en ny linje. Hver gang du kjører programmet, legges totalsummene opp igjen, og en ny linje skrives til filen.
Fremragende arbeid! Du skrev et smart, robust og praktisk verktøy som Tailwind Traders kan bruke til å behandle alle butikkenes salg hver kveld. I neste enhet skal vi se gjennom det du har lært, og noen tips å huske.
Ble du sittende fast?
Hvis du ble sittende fast under denne øvelsen, kan du se hele koden for dette prosjektet:
using Newtonsoft.Json;
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDirectory);
var salesTotal = CalculateSalesTotal(salesFiles);
File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");
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;
}
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;
}
record SalesData (double Total);