תרגיל - עבודה עם נתיבים
המחלקה ומערכת Path.NET Directory.GetCurrentDirectory הן שתי דרכים להגדיר ולחבר נתיבים של מערכת קבצים.
בתרגיל הקודם, כתבת תוכנית שעוברת בתיקיה כדי למצוא את כל sales.json הקבצים המשותפים בה או תיקיות משנה כלשהן.
בתרגיל זה, עליך להשתמש Path ולהשתמש Directory.GetCurrentDirectory כדי לשפר את התוכנית כדי שהיא תמצא קובץ עם סיומת .json אישית.
שימוש בספריה הנוכחית ושילוב נתיבים
בקוד הנוכחי Program.cs, אתה עובר את המיקום הסטטי של מאחסן זו. כעת, נשנה קוד זה כך שישתמש בערך 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;
}