Gyakorlat – A fájlrendszer használata

Befejeződött

A .NET segítségével információkat kereshet és adhat vissza a fájlokról és mappákról.

A Tailwind Traders számos fizikai üzlettel rendelkezik világszerte. Minden éjjel minden áruház létrehoz egy sales.json nevű fájlt, amely tartalmazza az adott nap összes értékesítését. Ezek a fájlok az áruházazonosítóval ellátott mappákba vannak rendezve.

Megjegyzés:

Ez a modul a .NET CLI-t (parancssori felületet) és a Visual Studio Code-ot használja a helyi fejlesztéshez. A modul elvégzése után alkalmazhatja a tanult fogalmakat olyan fejlesztői környezetek használatával, mint a Visual Studio (Windows) vagy a Mac Visual Studio (macOS), vagy folytathatja a fejlesztést a Visual Studio Code-ban (Windows, Linux, &macOS).

Ez a modul a .NET 6.0 SDK-t használja. Győződjön meg arról, hogy telepítve van a .NET 6.0, ha az alábbi parancsot futtatja az előnyben részesített terminálban:

dotnet --list-sdks

A következőhöz hasonló kimenet jelenik meg:

3.1.100 [C:\program files\dotnet\sdk]
5.0.100 [C:\program files\dotnet\sdk]
6.0.100 [C:\program files\dotnet\sdk]

Győződjön meg arról, hogy az első 6 verzió szerepel a listában. Ha egyik sem szerepel a listában, vagy a parancs nem található, telepítse a legújabb .NET 6.0 SDK-t.

A projekt klónozása

Ebben a gyakorlatban egy .NET-programot ír, amely keres egy könyvtárat és annak alkönyvtárait a sales.json nevű fájlokban.

Már létrehozott önnek egy kezdőprojektet. Klónozza a Visual Studio Code integrált termináljának használatával.

  1. Nyissa meg a Visual Studio Code-ot.

  2. A főmenüben válassza a Terminál megtekintése>lehetőséget a TERMINÁL ablak megnyitásához.

  3. (Nem kötelező) A TERMINÁL ablakban váltson olyan könyvtárra, amelybe másolni szeretné a fájlokat, például c:\MyProjects.

  4. A TERMINÁL ablakban futtassa a következő parancsot a kezdőprojekt klónozásához és a klónozott projekthez való ugráshoz:

    git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
    
  5. Futtassa a következő parancsot egy új .NET-konzolprojekt létrehozásához:

    dotnet new console -f net6.0 -n mslearn-dotnet-files -o .
    
  6. Futtassa a következő parancsot az új .NET-projekt megnyitásához a Visual Studio Code ugyanazon példányában:

    code -a .
    

    Tipp.

    Ezen a ponton előfordulhat, hogy a Visual Studio Code arra kéri, hogy a projekt létrehozásához és futtatásához szükséges eszközök hiányoznak.

    Screenshot showing the Visual Studio prompt that lets the user know something is missing from the project.

    Jelölje ki a felkiáltójelet tartalmazó háromszöget, majd válassza a Terminál újraindítása lehetőséget az olyan fájlok hozzáadásához, amelyek lehetővé teszik a Visual Studio Code számára a projekt futtatását és hibakeresését.

  7. Az EXPLORER ablak mslearn-dotnet-files területén bontsa ki az üzletek mappát és a benne lévő számozott mappákat.

    Screenshot of EXPLORER window that shows the project folder structure.

A sales.json fájlok megkeresése

Az alábbi feladatok létrehoznak egy programot, amely a projekt összes mappájában megtalálja a mslearn-dotnet-files sales.json fájlokat.

A System.IO névtér belefoglalása

  1. Az EXPLORER ablakban válassza ki a Program.cs fájlt a szerkesztőben való megnyitásához.

    Screenshot of the Explorer window highlighting the program.cs file.

  2. Illessze be a következő kódot a fájl első sorába a Program.csSystem.IO névterek importálásáhozSystem.Collections.Generic:

    using System.IO;
    using System.Collections.Generic;
    

Megjegyzés:

A .NET 6-tól kezdve a fenti kód két utasítása automatikusan bekerül egy új projektbe a ImplcitUsings tulajdonságcsoporton belül. Mivel egy új konzolprojekt létrehozásakor megadottuk a -f net6.0 jelzőt, a rendszer implicit módon hozzáadja őket. Ha azonban egy régebbi projekttel dolgozik, azokat bele kell foglalnia a Program.cs fájlba, és ez nem érinti ezt a projektet, ha a fájlban hagyja őket.

Függvény írása a sales.json fájlok megkereséséhez

Hozzon létre egy FindFiles nevű új függvényt, amely egy folderName paramétert kér.

  1. Cserélje le a Console.WriteLine("Hello, World!") sort a következő kódra:

    IEnumerable<string> FindFiles(string folderName)
    {
        List<string> salesFiles = new List<string>();
    
        var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
    
        foreach (var file in foundFiles)
        {
            // The file name will contain the full path, so only check the end of it
            if (file.EndsWith("sales.json"))
            {
                salesFiles.Add(file);
            }
        }
    
        return salesFiles;
    }
    
  2. A függvény meghívásához szúrja be az alábbi kódot az usingFindFiles utasítások alá. Ez a kód a fájlok keresésének helyeként adja át az üzletek mappanevét.

    var salesFiles = FindFiles("stores");
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  3. A fájl mentéséhez nyomja le a Ctrl+S (vagy Cmd+S macOS) billentyűkombinációt Program.cs .

A program futtatása

  1. A program futtatásához írja be a következő parancsot a terminálablakba:

    dotnet run
    
  2. A programnak a következő kimenetet kell megjelenítenie:

    stores/sales.json
    stores/201/sales.json
    stores/202/sales.json
    stores/203/sales.json
    stores/204/sales.json
    

Excellent! Sikeresen írt egy parancssori programot, amely bejárja a stores címtár összes mappáját, és felsorolja a talált sales.json fájlokat.

Ebben a példában az áruházak könyvtárának elérési útja meglehetősen egyszerű volt, és a program munkakönyvtárában. A következő leckében megtanulhatja, hogyan hozhat létre összetett struktúrákat, amelyek az operációs rendszereken működnek az Path osztály használatával.

Elakadt?

Ha probléma merült fel a program futtatásával kapcsolatban, a fájlhoz tartozó teljes kódot Program.cs találja. Cserélje le a Program.cs fájl tartalmát a következő kódra:

var salesFiles = FindFiles("stores");
    
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)
    {
        // The file name will contain the full path, so only check the end of it
        if (file.EndsWith("sales.json"))
        {
            salesFiles.Add(file);
        }
    }

    return salesFiles;
}