Läsa och skriva till filer

Slutförd

Att läsa data från filer och skriva data till filer är grundläggande koncept i .NET.

Tailwind Traders måste skriva summan av alla enskilda butiksförsäljningsfiler till en ny fil och sedan läsa in filen i företagets försäljningssystem.

Här lär du dig hur du använder File klassen för att läsa och skriva till filer.

Läsa data från filer

Du läser filer med hjälp av metoden ReadAllText i klassen File.

File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");

Objektet som returneras från ReadAllText är en sträng.

{
  "total": 22385.32
}

Parsa data i filer

Det räcker inte att bara få data i ett strängformat. Det är fortfarande bara en massa tecken men är nu i ett format som du kan läsa. Du vill kunna parsa dessa data till ett format som du kan använda programmatiskt.

Det finns många sätt att parsa JSON-filer med .NET, bland annat ett communitybibliotek som heter Json.NET.

Du kan lägga till Json.NET-paketet i projektet med hjälp av NuGet:

dotnet add package Newtonsoft.Json

Lägg sedan till using Newtonsoft.Json överst i klassfilen:

using Newtonsoft.Json; 

Och använd JsonConvert.DeserializeObject metoden:

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; }
}

Dricks

Filer kan ha olika format. Det är bäst att använda JSON-filer eftersom det finns inbyggt stöd för JSON i språket. Du kan även stöta på .csv-filer, filer med fast bredd eller filer i något annat format. I så fall rekommenderar vi att du söker på nuget.org efter en parser för den filtypen.

Skriva data till filer

Du lärde dig att skriva filer i föregående övning. Det är bara det att du skrev en tom. När du skriver data till en fil använder du också WriteAllText-metoden, men då skickar du in de data som du vill skriva.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());

// totals.txt
// 22385.32

Lägga till data till filer

I föregående exempel skrivs filen över varje gång du skriver till den. Ibland vill du inte ha det. Du vill lägga till data i filen i stället för att ersätta dem helt. Du kan lägga till data med metoden File.AppendAllText. Som standard File.AppendAllText skapar filen om den inte redan finns.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");

// totals.txt
// 22385.32
// 22385.32

Dricks

I föregående kodexempel Environment.NewLine uppmanas .NET att placera värdet på sin egen rad. Om du inte skickar in det här värdet får du alla tal direkt efter varandra på samma rad.

I nästa övning slutför du projektet med total försäljning för Tailwind Traders genom att läsa alla försäljningsfiler och skriva totalsumman till en .txt-fil. Företagets handelssystem kan sedan bearbeta filen.