تمرين - العمل مع المسارات
فئة Path .NET وDirectory.GetCurrentDirectory هما طريقتان لتعريف مسارات نظام الملفات وإنشائها.
في التمرين السابق، كتبت برنامجًا يتكرر من خلال مجلد للعثور على أي من ملفات sales.json الموجودة فيه أو في أي مجلدات فرعية.
في هذا التمرين، يمكنك استخدام Path الفئة ولتحسين Directory.GetCurrentDirectory البرنامج بحيث يعثر على أي ملف بملحق .json.
استخدم الدليل الحالي وادمج المسارات
في التعليمات البرمجية الحالية لـ Program.cs، أنت تمرر الموقع الثابت لمجلد stores. الآن، سنغير هذه التعليمة البرمجية Directory.GetCurrentDirectory لاستخدام القيمة بدلا من تمرير اسم مجلد ثابت.
في المحرر، أدرج التعليمات البرمجية التالية أعلى السطر الأول من ملف
Program.cs. تستخدم هذه التعليمات البرمجية الأسلوبDirectory.GetCurrentDirectoryللحصول على المسار للدليل الحالي وتخزينه في متغير جديدcurrentDirectory:var currentDirectory = Directory.GetCurrentDirectory();أدرج التعليمات البرمجية التالية بعد السطر الذي أضفته للتو. تستخدم هذه التعليمات البرمجية الأسلوب
Path.Combineلإنشاء مسار كامل لدليل المتاجر وتخزينه في متغير جديدstoresDirectory:var storesDirectory = Path.Combine(currentDirectory, "stores");استبدل السلسلة
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); }اضغط على Ctrl+S (أو Cmd+S macOS) لحفظ الملف.
شغّل البرنامج من سطر الأوامر:
dotnet runيجب أن يظهر البرنامج الإخراج التالي:
/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 الأسلوب للتحقق من الملحق لكل ملف.
في الحلقة
foreachالتي تتكرر من خلالfoundFiles، أدرج السطر التالي من التعليمات البرمجية أعلى العبارةifلتعريف متغيرextensionجديد . تستخدم هذه التعليمات البرمجية الأسلوبPath.GetExtensionللحصول على الملحق لكل ملف.var extension = Path.GetExtension(file);بادر بتغيير العبارة
ifلتبدو مثل السطر التالي من التعليمات البرمجية. تتحقق هذه العبارة مما إذا كان ملحق الملف يساوي .json.if (extension == ".json")يجب أن تبدو الحلقة
foreachمشابهة للتعليمات البرمجية التالية:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }اضغط على Ctrl+S / Cmd+S لحفظ الملف.
شغّل البرنامج من سطر الأوامر:
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;
}