Übung: Lese- und Schreibvorgänge für Dateien
Sie können auch die File
-Klasse in .NET verwenden, um Daten in Dateien zu schreiben oder aus diesen zu lesen.
Die Erstellung des .NET-Projekts für Tailwind Traders ist beinahe abgeschlossen. Nach jetzigem Stand liest Ihr Code ein gegebenes Verzeichnis, sucht nach allen Dateien mit der JSON-Erweiterung und erstellt die Datei totals.txt.
In dieser Übung schließen Sie das Projekt ab, indem Sie die JSON-Dateien lesen, den Gesamtumsatz der einzelnen Filialen addieren und das Gesamtergebnis in die Datei totals.txt schreiben.
Hinzufügen von System.Text.Json zum Projekt
Fügen Sie über das Terminal Json.NET zum Projekt hinzu.
dotnet add package System.Text.Json
Vorbereiten auf Verkaufsdaten
Fügen Sie
using Newtonsoft.Json
oben inProgram.cs
hinzu:using System.Text.Json;
Fügen Sie in
Program.cs
direkt unter derFindFiles
-Methode ein neuesrecord
-Element hinzu, das die Daten in sales.json modelliert:record SalesData (double Total);
Erstellen einer Methode zum Berechnen der Gesamtumsätze
Erstellen Sie in
Program.cs
, direkt vor der Zeilerecord
, die Sie im vorherigen Schritt hinzugefügt haben, eine neue Funktion, die die Umsatzsumme berechnet. Bei dieser Methode sollte einIEnumerable<string>
-Element von Dateipfaden verwendet werden, über die sie iterieren kann.double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // READ FILES LOOP return salesTotal; }
Ersetzen Sie innerhalb dieser Methode
// READ FILES LOOP
durch eine Schleife, diesalesFiles
durchläuft, die Datei liest, den Inhalt in das JSON-Format bringt und die VariablesalesTotal
dann mit demtotal
-Wert aus der Datei inkrementiert: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 = JsonSerializer.Deserialize<SalesData?>(salesJson); // Add the amount found in the Total field to the salesTotal variable salesTotal += data?.Total ?? 0; } return salesTotal; }
Aufrufen der CalculateSalesTotals-Methode
Fügen Sie in der Datei
Program.cs
direkt über demFile.WriteAllText
-Aufruf einen Aufruf für dieCalculateSalesTotal
-Funktion hinzu: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);
Schreiben des Gesamtergebnisses in die Datei „totals.txt“
Ändern Sie in der Datei
Program.cs
denFile.WriteAllText
-Block so, dass der Wert dersalesTotal
-Variablen in die Datei totals.txt geschrieben wird. Wenn Sie schon dabei sind, ändern Sie denFile.WriteAllText
-Aufruf inFile.AppendAllText
, damit nichts in der Datei überschrieben wird.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}");
Drücken Sie STRG+S / Befehlstaste+S, um die Datei Program.cs zu speichern.
Ausführen des Programms
Führen Sie das Programm über das Terminal aus:
dotnet run
Das Programm erzeugt keine Ausgabe. Wenn Sie sich die Datei salesTotalDir/totals.txt ansehen, finden Sie dort die Gesamtsumme der Umsätze aus der Datei sales.json.
Führen Sie das Programm über das Terminal noch mal aus.
dotnet run
Wählen Sie die Datei salesTotalDir/totals.txt aus.
Die Datei totals.txt enthält jetzt eine zweite Zeile. Bei jeder erneuten Ausführung des Programms werden nun die Gesamtsummen addiert, und es wird eine neue Zeile in die Datei geschrieben.
Ausgezeichnet! Sie haben ein kleines, stabiles und hilfreiches Tool geschrieben, das Tailwind Traders verwenden kann, um jede Nacht die Umsätze aller Filialen des Unternehmens zu verarbeiten. In der nächsten Einheit rekapitulieren Sie das Gelernte und erhalten einige Tipps.
Wissen Sie nicht weiter?
Wenn Sie während dieser Übung Probleme haben, finden Sie hier den vollständigen Projektcode:
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);