تمرين - العمل مع المسارات

مكتمل

فئة Path .NET وDirectory.GetCurrentDirectory هما طريقتان لتعريف مسارات نظام الملفات وإنشائها.

في التمرين السابق، كتبت برنامجًا يتكرر من خلال مجلد للعثور على أي من ملفات sales.json الموجودة فيه أو في أي مجلدات فرعية.

في هذا التمرين، يمكنك استخدام Path الفئة ولتحسين Directory.GetCurrentDirectory البرنامج بحيث يعثر على أي ملف بملحق .json.

استخدم الدليل الحالي وادمج المسارات

في التعليمات البرمجية الحالية لـ Program.cs، أنت تمرر الموقع الثابت لمجلد stores. الآن، سنغير هذه التعليمة البرمجية Directory.GetCurrentDirectory لاستخدام القيمة بدلا من تمرير اسم مجلد ثابت.

  1. في المحرر، أدرج التعليمات البرمجية التالية أعلى السطر الأول من ملف Program.cs. تستخدم هذه التعليمات البرمجية الأسلوب Directory.GetCurrentDirectory للحصول على المسار للدليل الحالي وتخزينه في متغير جديد currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. أدرج التعليمات البرمجية التالية بعد السطر الذي أضفته للتو. تستخدم هذه التعليمات البرمجية الأسلوب Path.Combine لإنشاء مسار كامل لدليل المتاجر وتخزينه في متغير جديدstoresDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. استبدل السلسلة stores في استدعاء الدالة FindFiles بالمتغير storesDirectoryالجديد :

    var salesFiles = FindFiles(storesDirectory);
    

    يجب أن يبدو أعلى ملفك الآن مشابهًا للقصاصة البرمجية التالية:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. اضغط على Ctrl+S (أو Cmd+S macOS) لحفظ الملف.

  5. شغّل البرنامج من سطر الأوامر:

    dotnet run
    
  6. يجب أن يظهر البرنامج الإخراج التالي:

    /home/username/dotnet-files/stores/sales.json  
    /home/username/dotnet-files/stores/201/sales.json  
    /home/username/dotnet-files/stores/202/sales.json  
    /home/username/dotnet-files/stores/203/sales.json  
    /home/username/dotnet-files/stores/204/sales.json  
    

    لاحظ أن أسماء الملفات التي تم إرجاعها تتضمن مسار النظام الكامل. تم تضمين هذا المسار لأن الأسلوب Directory.GetCurrentDirectory قام بإرجاع المسار الكامل إلى الموقع الحالي.

البحث عن كافة ملفات .json

بدلاً من البحث عن ملفات sales.json فقط، يحتاج البرنامج للبحث عن أي ملف بملحق .json. للقيام بذلك، يمكنك استخدام Path.GetExtension الأسلوب للتحقق من الملحق لكل ملف.

  1. في الحلقة foreach التي تتكرر من خلال foundFiles، أدرج السطر التالي من التعليمات البرمجية أعلى العبارة if لتعريف متغير extensionجديد . تستخدم هذه التعليمات البرمجية الأسلوب Path.GetExtension للحصول على الملحق لكل ملف.

        var extension = Path.GetExtension(file);
    
  2. بادر بتغيير العبارة if لتبدو مثل السطر التالي من التعليمات البرمجية. تتحقق هذه العبارة مما إذا كان ملحق الملف يساوي .json.

           if (extension == ".json")
    

    يجب أن تبدو الحلقة foreach مشابهة للتعليمات البرمجية التالية:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. اضغط على Ctrl+S / Cmd+S لحفظ الملف.

  4. شغّل البرنامج من سطر الأوامر:

    dotnet run
    

    يعرض الإخراج الآن جميع ملفات .json في كل من دلائل معرف المتجر:

    /home/username/dotnet-files/stores/sales.json  
    /home/username/dotnet-files/stores/201/sales.json
    /home/username/dotnet-files/stores/201/salestotals.json  
    /home/username/dotnet-files/stores/202/sales.json
    /home/username/dotnet-files/stores/202/salestotals.json    
    /home/username/dotnet-files/stores/203/sales.json  
    /home/username/dotnet-files/stores/203/salestotals.json  
    /home/username/dotnet-files/stores/204/sales.json  
    /home/username/dotnet-files/stores/204/salestotals.json  
    

عمل رائع! لقد استخدمت الفئة Path والأسلوب Directory.GetCurrentDirectory لجعل البرنامج أكثر قوة. في الوحدة التالية، ستتعلم كيفية إنشاء الدلائل ونقل الملفات بين المواقع.

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

إذا واجهتك مشكلة في أي وقت في هذا التمرين، فإليك التعليمة البرمجية المكتملة. قم بإزالة كل شيء في Program.cs واستبدله بهذا الحل:

var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");

var salesFiles = FindFiles(storesDirectory);
    
foreach (var file in salesFiles)
{
    Console.WriteLine(file);
}

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