Latihan - Baca dan tulis ke file

Selesai

Anda juga dapat menggunakan File kelas di .NET untuk menulis data ke file dan membaca data dari file.

Anda hampir selesai membuat mahakarya .NET untuk Tailwind Traders. Sejauh ini, kode Anda membaca direktori apa pun, menemukan semua file .json, dan membuat file totals.txt .

Dalam latihan ini, Anda menyelesaikan proyek dengan membaca file .json, menambahkan total penyimpanan, dan menulis total keseluruhan ke file totals.txt .

Menambahkan Newtonsoft.Json ke proyek

  1. Menggunakan terminal, tambahkan Newtonsoft.Json ke proyek.

    dotnet add package Newtonsoft.Json
    

Bersiap untuk data penjualan

  1. Di bagian Program.csatas , tambahkan using Newtonsoft.Json:

    using Newtonsoft.Json;
    
  2. Di Program.cs langsung di FindFiles bawah metode , tambahkan baru record yang memodelkan data sales.json :

    record SalesData (double Total);
    

Membuat metode yang menghitung total penjualan

  1. Di Program.cs, tepat sebelum record baris yang Anda tambahkan di langkah sebelumnya, buat fungsi baru yang menghitung total penjualan. Metode ini harus mengambil IEnumerable<string> jalur file yang dapat diulangi.

    double CalculateSalesTotal(IEnumerable<string> salesFiles)
    {
        double salesTotal = 0;
    
        // READ FILES LOOP
    
        return salesTotal;
    }
    
  2. Dalam metode itu, ganti // READ FILES LOOP dengan perulangan yang berulang di atas salesFiles, membaca file, mengurai konten sebagai JSON, lalu menaikkan salesTotal variabel dengan total nilai dari file:

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

Panggil metode CalculateSalesTotals

  1. Program.cs Dalam file, tambahkan panggilan ke CalculateSalesTotal fungsi tepat di atas File.WriteAllText panggilan:

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

Tulis total ke file totals.txt

  1. Di Program.cs file, ubah File.WriteAllText blok untuk menulis nilai salesTotal variabel ke file totals.txt. Saat Anda melakukannya, ubah File.WriteAllText panggilan menjadi File.AppendAllText sehingga tidak ada dalam file yang akan ditimpa.

    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}");
    
  2. Simpan file Program.cs dengan menekan Ctrl+S / Cmd+S.

Jalankan program

  1. Jalankan program dari terminal:

    dotnet run
    

    Tidak ada output dari program. Jika Anda melihat dalam file salesTotalDir/totals.txt , Anda menemukan total semua penjualan dari file sales.json .

  2. Jalankan program dari terminal lagi.

    dotnet run
    
  3. Pilih file salesTotalDir/totals.txt.

    File totals.txt sekarang memiliki baris kedua. Setiap kali Anda menjalankan program, total ditambahkan lagi dan baris baru ditulis ke file.

Pekerjaan luar biasa! Anda menulis alat cerdas, kuat, dan berguna yang dapat digunakan Tailwind Traders untuk memproses semua penjualan tokonya setiap malam. Di unit berikutnya, kami akan meninjau apa yang Anda pelajari dan beberapa tips untuk diingat.

Macet?

Jika Anda terjebak selama latihan ini, berikut adalah kode lengkap untuk proyek ini:

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