التمرين - قراءة وكتابة إلى الملفات

مكتمل

يمكنك أيضًا استخدام الفئة File في .NET لكتابة البيانات إلى الملفات وقراءة البيانات من الملفات.

أنت على وشك الانتهاء من إنشاء تحفة .NET لشركة Tailwind Traders. تقرأ التعليمة البرمجية الخاصة بك أي دليل حتى الآن، وتبحث عن جميع ملفات .json، وتقوم بإنشاء ملف totals.txt.

في هذا التمرين، يمكنك إكمال المشروع عن طريق قراءة ملفات .json وإضافة إجماليات المتجر وكتابة الإجمالي الكلي إلى ملف totals.txt .

إضافة Newtonsoft.Json إلى المشروع

  1. باستخدام المحطة الطرفية، أضف Newtonsoft.Json إلى المشروع.

    dotnet add package Newtonsoft.Json
    

الاستعداد لبيانات المبيعات

  1. في الجزء العلوي من Program.cs، أضف using Newtonsoft.Json:

    using Newtonsoft.Json;
    
  2. في Program.cs أسفل الأسلوب مباشرة، FindFilesrecordيقوم بنمذجة بيانات sales.json:

    record SalesData (double Total);
    

إنشاء أسلوب يحسب إجماليات المبيعات

  1. في Program.cs، قبل record السطر الذي أضفته في الخطوة السابقة، أنشئ دالة جديدة تحسب إجمالي المبيعات. يجب أن تأخذ هذه الطريقة IEnumerable<string> من مجموعة مسارات الملفات التي يمكنها تكرارها.

    double CalculateSalesTotal(IEnumerable<string> salesFiles)
    {
        double salesTotal = 0;
    
        // READ FILES LOOP
    
        return salesTotal;
    }
    
  2. ضمن هذا الأسلوب، استبدل // READ FILES LOOP بحلقة تتكرر عبر salesFiles، وقراءة الملف، وتحليل المحتوى ك JSON، ثم زيادة salesTotal المتغير بالقيمة total من الملف:

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

استدعاء أسلوب حساب المبيعات الإجمالية

  1. في Program.cs الملف، أضف استدعاء إلى الدالة CalculateSalesTotal أعلى File.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);
    

كتابة الإجمالي إلى ملف totals.txt

  1. في ملف Program.cs، عدل الكتلة File.WriteAllText لكتابة قيمة المتغير salesTotal إلى ملف totals.txt. أثناء وجودك فيه، قم بتغيير File.WriteAllText الاستدعاء إلى File.AppendAllText بحيث لا تتم الكتابة فوق أي شيء في الملف.

    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. احفظ ملف Program.cs بالضغط على Ctrl+S / Cmd+S.

قم بتشغيل البرنامج.

  1. تشغيل البرنامج من المحطة الطرفية:

    dotnet run
    

    لا يوجد ناتج من البرنامج. إذا نظرت في ملف salesTotalDir/totals.txt ، فستجد إجمالي جميع المبيعات من ملف sales.json .

  2. قم بتشغيل البرنامج من الوحدة الطرفية مرة أخرى.

    dotnet run
    
  3. حدد ملف salesTotalsDir/totals.txt.

    يحتوي الملف totals.txt الآن على خط ثانٍ. في كل مرة تقوم فيها بتشغيل البرنامج، تتم إضافة الإجماليات مرة أخرى وتتم كتابة خط جديد إلى الملف.

عمل متميز! لقد كتبت أداة ذكية وقوية ومهمة يمكن أن تستخدمها Tailwind Traders لمعالجة جميع مبيعات متاجرها كل ليلة. في الوحدة التالية، سنراجع ما تعلمته وكذلك بعض النصائح التي يجب تذكرها.

هل واجهتك مشكلة؟

إذا واجهتك مشكلة أثناء هذا التمرين، فإليك التعليمات البرمجية الكاملة لهذا المشروع:

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