תרגיל - עבודה עם נתיבים

הושלם

המחלקה ומערכת Path.NET Directory.GetCurrentDirectory הן שתי דרכים להגדיר ולחבר נתיבים של מערכת קבצים.

בתרגיל הקודם, כתבת תוכנית שעוברת בתיקיה כדי למצוא את כל sales.json הקבצים המשותפים בה או תיקיות משנה כלשהן.

בתרגיל זה, עליך להשתמש Path ולהשתמש Directory.GetCurrentDirectory כדי לשפר את התוכנית כדי שהיא תמצא קובץ עם סיומת .json אישית.

שימוש בספריה הנוכחית ושילוב נתיבים

בקוד הנוכחי Program.cs, אתה עובר את המיקום הסטטי של מאחסן זו. כעת, נשנה קוד זה כך שישתמש בערך 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;
}