Lettura e scrittura nei file
La lettura di dati dai file e la scrittura di dati nei file sono concetti fondamentali in .NET.
Tailwind Traders deve scrivere il totale di tutti i singoli file di vendita del negozio in un nuovo file, quindi caricare il file nel sistema di vendita della società.
In questa unità si apprenderà come usare la classe File
per leggere e scrivere nei file.
Leggere i dati dai file
I file vengono letti tramite il metodo ReadAllText
nella classe File
.
File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
L'oggetto restituito da ReadAllText
è una stringa.
{
"total": 22385.32
}
Analizzare i dati nei file
Questi dati sono in formato stringa e non sono ancora molto utili. Sono ancora solo caratteri, ma ora in un formato leggibile. Si vuole avere la possibilità di analizzare questi dati in un formato utilizzabile a livello di programmazione.
Ci sono molti modi diversi per analizzare i file JSON con .NET, tra cui una libreria della community nota come Json.NET.
È possibile aggiungere il pacchetto Json.NET al progetto usando NuGet:
dotnet add package Newtonsoft.Json
Quindi, aggiungere using Newtonsoft.Json
all'inizio del file della classe:
using Newtonsoft.Json;
E usare il metodo JsonConvert.DeserializeObject
:
var salesJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
var salesData = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
Console.WriteLine(salesData.Total);
class SalesTotal
{
public double Total { get; set; }
}
Suggerimento
I file possono avere diversi formati. Il formato JSON è quello preferibile grazie al supporto predefinito nel linguaggio. Potrebbe anche essere necessario usare file in formato CSV, a larghezza fissa o in un altro formato. In tal caso, è consigliabile cercare un parser per il tipo di file specifico in nuget.org.
Scrivere dati nei file
Nell'esercizio precedente si è già appreso come scrivere file, anche se il file scritto era vuoto. Per scrivere i dati in un file, usare lo stesso metodo WriteAllText
, ma passare i dati da scrivere.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());
// totals.txt
// 22385.32
Accodare dati ai file
Nell'esempio precedente il file viene sovrascritto ogni volta che vi si scrive. A volte questo non è il risultato desiderato. Si desidera aggiungere dati al file, anziché sostituirli completamente. È possibile accodare i dati con il metodo File.AppendAllText
. Per impostazione predefinita, File.AppendAllText
crea il file, se non esiste già.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");
// totals.txt
// 22385.32
// 22385.32
Suggerimento
Nell'esempio di codice precedente Environment.NewLine
richiede a .NET di inserire il valore in una riga a parte. Se questo valore non viene passato, i numeri vengono inseriti in un'unica riga uno dopo l'altro.
Nell'esercizio successivo verrà completato il progetto dei totali delle vendite per Tailwind Traders leggendo tutti i file delle vendite e scrivendo il totale complessivo in un file con estensione txt. Il sistema commerciale dell'azienda può quindi elaborare il file.