Exercice - Lire et écrire dans des fichiers
Vous pouvez aussi utiliser la classe File
dans .NET pour lire et écrire des données dans des fichiers.
Vous avez presque fini de créer un magnifique programme .NET pour Tailwind Traders. Pour l’instant, votre code lit n’importe quel répertoire, trouve tous les fichiers .json et crée un fichier totals.txt.
Dans cet exercice, vous terminez le projet en lisant les fichiers .json, en ajoutant les totaux du magasin et en écrivant le total général dans le fichier totals.txt.
Ajouter System.Text.Json au projet
À l’aide du terminal, ajoutez Json.NET au projet.
dotnet add package System.Text.Json
Préparer les données de vente
En haut de
Program.cs
, ajoutezusing Newtonsoft.Json
:using Newtonsoft.Json;
Dans
Program.cs
, directement sous la méthodeFindFiles
, ajoutez un nouveaurecord
qui modélise les données de sales.json :record SalesData (double Total);
Créer une méthode qui calcule les totaux des ventes
Dans
Program.cs
, juste avant la lignerecord
que vous avez ajoutée à l’étape précédente, créez une fonction qui calcule le total des ventes. Cette méthode doit prendre unIEnumerable<string>
de chemins de fichiers dans lequel elle peut itérer.double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // READ FILES LOOP return salesTotal; }
Dans cette méthode, remplacez
// READ FILES LOOP
par une boucle qui itère dans lesalesFiles
, lit le fichier, analyse le contenu au format JSON, puis incrémente la variablesalesTotal
avec la valeurtotal
du fichier :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; }
Appeler la méthode CalculateSalesTotals
Dans le fichier
Program.cs
, ajoutez un appel à la fonctionCalculateSalesTotal
juste au-dessus de l’appel deFile.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);
Écrire le total dans le fichier totals.txt
Dans le fichier
Program.cs
, modifiez le blocFile.WriteAllText
pour écrire la valeur de la variablesalesTotal
dans le fichier totals.txt. Pendant que vous y êtes, modifiez l’appelFile.WriteAllText
deFile.AppendAllText
pour que rien dans le fichier ne soit écrasé.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}");
Enregistrez le fichier Program.cs en appuyant sur Ctrl+S / Cmd+S.
Exécuter le programme
Exécutez le programme à partir du terminal :
dotnet run
Il n’y a aucune sortie provenant du programme. Si vous examinez le fichier salesTotalDir/totals.txt, vous voyez le total de toutes les ventes du fichier sales.json.
Réexécutez le programme à partir du terminal.
dotnet run
Sélectionnez le fichier salesTotalDir/totals.txt.
Le fichier totals.txt contient maintenant une deuxième ligne. Chaque fois que vous exécutez le programme, les totaux sont à nouveau ajoutés et une nouvelle ligne est écrite dans le fichier.
Beau travail ! Vous avez écrit un outil intelligent, robuste et pratique que Tailwind Traders peut utiliser pour traiter toutes les ventes de ses magasins tous les soirs. Dans l’unité suivante, nous allons passer en revue ce que vous avez appris, ainsi que quelques conseils à garder en tête.
Vous êtes bloqué ?
Si vous êtes bloqué pendant cet exercice, voici le code complet de ce projet :
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);