Cvičení – práce se systémem souborů

Dokončeno

Pomocí .NET můžete najít a vrátit informace o souborech a složkách.

Firma Tailwind Traders má spoustu kamenných prodejen po celém světě. Každý večer vytvoří každý obchod soubor s názvem sales.json , který obsahuje celkový prodej za daný den. Tyto soubory jsou uspořádány do složek pojmenovaných s ID úložiště.

Poznámka:

Tento modul používá rozhraní příkazového řádku .NET (rozhraní příkazového řádku) a Visual Studio Code pro místní vývoj. Po dokončení tohoto modulu můžete použít koncepty, které jste se naučili, pomocí vývojového prostředí, jako je Visual Studio (Windows) nebo Visual Studio pro Mac (macOS), nebo pokračovat ve vývoji v editoru Visual Studio Code (Windows, Linux a macOS).

Tento modul používá sadu .NET 8.0 SDK. Spuštěním následujícího příkazu v upřednostňovaném příkazovém terminálu se ujistěte, že máte nainstalované rozhraní .NET 8.0:

dotnet --list-sdks

Zobrazí se výstup podobný následujícímu příkladu:

6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]

Ujistěte se, že je uvedená verze, na 8 které začíná. Pokud žádný není uvedený nebo příkaz nebyl nalezen, nainstalujte nejnovější sadu .NET 8.0 SDK.

Klonování projektu

V tomto cvičení napíšete program .NET, který prohledá adresář a jeho podadresáře pro soubory s názvem sales.json.

Počáteční projekt už pro vás byl vytvořen. Naklonujete ho pomocí integrovaného terminálu v editoru Visual Studio Code.

  1. Otevřete Visual Studio Code.

  2. V hlavní nabídce vyberte Zobrazit>terminál a otevřete okno terminálu.

  3. (Volitelné) V okně terminálu přejděte do adresáře, do kterého chcete soubory zkopírovat, například c:\MyProjects.

  4. V okně terminálu spusťte následující příkaz, který naklonuje počáteční projekt a přejde do klonovaného projektu:

    git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
    
  5. Spuštěním následujícího příkazu vytvořte nový projekt konzoly .NET:

    dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
    
  6. Spuštěním následujícího příkazu otevřete nový projekt .NET ve stejné instanci editoru Visual Studio Code:

    code -a .
    

    Tip

    V tomto okamžiku může Visual Studio Code zobrazit výzvu, že chybí požadované prostředky pro sestavení a spuštění projektu.

    Snímek obrazovky s výzvou sady Visual Studio, která uživateli umožní zjistit, že v projektu chybí něco

    Vyberte trojúhelník s vykřičníkem a pak výběrem terminálu Relaunch přidejte soubory, které sadě Visual Studio Code umožňují spustit a ladit projekt.

  7. V okně Průzkumníka v části mslearn-dotnet-files rozbalte složku stores a všechny očíslované složky uvnitř.

    Snímek obrazovky s oknem Průzkumníka zobrazující strukturu složek projektu

Nalezení souborů sales.json

Následující úkoly vytvoří program pro vyhledání všech sales.json souborů ve všech složkách mslearn-dotnet-files projektu.

Zahrnutí oboru názvů System.IO

  1. V okně Průzkumníka Program.cs vyberte soubor, který chcete otevřít v editoru.

    Snímek obrazovky okna Průzkumníka se zvýrazněním souboru program.cs

  2. Do prvního řádku Program.cssouboru vložte následující kód, který importuje obory System.IOSystem.Collections.Generic názvů:

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

Poznámka:

Počínaje rozhraním .NET 6 se dva příkazy v předchozím kódu automaticky zahrnou do nového projektu prostřednictvím ImplcitUsings skupiny vlastností. Vzhledem k tomu, že jsme při vytváření nového projektu konzoly zadali -f net8.0 příznak, implicitně se přidají. Pokud ale pracujete se starším projektem, musíte je zahrnout do Program.cs souboru a tento projekt to neovlivní, pokud je v souboru necháte.

Vytvoření funkce pro nalezení souborů sales.json

Vytvořte novou funkci nazvanou FindFiles, která převezme parametr folderName.

  1. Nahraďte console.WriteLine("Hello, World!"); řádek s následujícím kódem:

    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. Pod příkazy pro volání using funkce vložte následující kódFindFiles. Tento kód předá název složky stores jako umístění pro hledání souborů.

    var salesFiles = FindFiles("stores");
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  3. Stisknutím kombinace kláves Ctrl+S (nebo Cmd+S macOS) soubor uložte Program.cs .

Spuštění programu

  1. V okně terminálu zadejte následující příkaz, který program spustí:

    dotnet run
    
  2. Program by měl zobrazit následující výstup:

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

Výborně! Úspěšně jste napsali program příkazového řádku, který prochází všemi složkami v stores adresáři a zobrazí seznam všech nalezených souborů sales.json .

V tomto příkladu byla cesta k adresáři úložišť poměrně jednoduchá a v pracovním adresáři programu. V další lekci se dozvíte, jak pomocí třídy vytvořit složité struktury, které fungují napříč operačními Path systémy.

Zasekli jste se?

Pokud jste měli nějaké problémy se spuštěním programu, tady je hotový kód Program.cs souboru. Program.cs Obsah souboru nahraďte tímto kódem:

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