Oefening: met het bestandssysteem werken

Voltooid

U kunt .NET gebruiken om informatie over bestanden en mappen te zoeken en te retourneren.

Tailwind Traders beschikt over de hele wereld over veel fysieke winkels. Elke nacht maakt elke winkel een bestand met de naam sales.json dat het totaal van alle verkopen voor die dag bevat. Deze bestanden zijn ingedeeld in mappen met de naam winkel-id.

Notitie

Deze module maakt gebruik van de .NET CLI (Opdrachtregelinterface) en Visual Studio Code voor lokale ontwikkeling. Nadat u deze module hebt voltooid, kunt u de concepten toepassen die u hebt geleerd met behulp van een ontwikkelomgeving zoals Visual Studio (Windows) of Visual Studio voor Mac (macOS) of de ontwikkeling voortzetten in Visual Studio Code (Windows, Linux en macOS).

In deze module wordt de .NET 8.0 SDK gebruikt. Zorg ervoor dat .NET 8.0 is geïnstalleerd door de volgende opdracht uit te voeren in de opdrachtterminal van uw voorkeur:

dotnet --list-sdks

Uitvoer die vergelijkbaar is met het volgende voorbeeld wordt weergegeven:

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

Zorg ervoor dat er een versie wordt vermeld die begint met 8 . Als er geen wordt vermeld of de opdracht niet wordt gevonden, installeert u de meest recente .NET 8.0 SDK.

Het project klonen

In deze oefening schrijft u een .NET-programma waarmee een map en de bijbehorende submappen worden doorzocht naar bestanden met de naam sales.json.

Er is al een startersproject voor u gemaakt. U kloont deze met behulp van de geïntegreerde terminal in Visual Studio Code.

  1. Open Visual Studio Code.

  2. Selecteer Terminal weergeven>in het hoofdmenu om een terminalvenster te openen.

  3. (Optioneel) Ga in het terminalvenster naar een map waarnaar u de bestanden wilt kopiëren, zoals c:\MyProjects.

  4. Voer in het terminalvenster de volgende opdracht uit om het startersproject te klonen en naar het gekloonde project te gaan:

    git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
    
  5. Voer de volgende opdracht uit om een nieuw .NET Console-project te maken:

    dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
    
  6. Voer de volgende opdracht uit om het nieuwe .NET-project te openen in hetzelfde exemplaar van Visual Studio Code:

    code -a .
    

    Tip

    Op dit moment kan Visual Studio Code u vragen dat vereiste assets voor het bouwen en uitvoeren van het project ontbreken.

    Schermopname van de Visual Studio-prompt waarmee de gebruiker weet dat er iets ontbreekt in het project.

    Selecteer de driehoek met het uitroepteken en selecteer vervolgens de terminal opnieuw starten om de bestanden toe te voegen waarmee Visual Studio Code het project kan uitvoeren en fouten kan opsporen.

  7. Vouw in het Verkenner-venster onder mslearn-dotnet-files de map stores en elk van de genummerde mappen binnen uit.

    Schermopname van het Verkenner-venster met de projectmapstructuur.

De sales.json-bestanden zoeken

Met de volgende taken maakt u een programma om alle sales.json bestanden in alle mappen van het mslearn-dotnet-files project te vinden.

De System.IO-naamruimte opnemen

  1. Selecteer in het Verkenner-venster het Program.cs bestand om het te openen in de editor.

    Schermopname van het Verkenner-venster waarin het program.cs-bestand wordt gemarkeerd.

  2. Plak de volgende code in de eerste regel van het Program.csbestand om de System.IO en System.Collections.Generic naamruimten te importeren:

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

Notitie

Vanaf .NET 6 worden de twee instructies in de voorgaande code automatisch opgenomen in een nieuw project via de ImplcitUsings eigenschapsgroep. Omdat we de vlag hebben opgegeven bij het -f net8.0 maken van een nieuw consoleproject, worden ze impliciet toegevoegd. Als u echter met een ouder project werkt, moeten ze worden opgenomen in het Program.cs bestand en heeft dit geen invloed op dit project als u ze in het bestand laat staan.

Een functie schrijven om de sales.json-bestanden te zoeken

Maak een nieuwe functie met de naam FindFiles waarbij een folderName-parameter wordt gebruikt.

  1. Vervang de regel Console.WriteLine("Hello, World!"); door de volgende code:

    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. Voeg de volgende code toe onder de using instructies om de FindFiles functie aan te roepen. Deze code geeft de mapnaam van de stores door als de locatie voor het zoeken naar bestanden.

    var salesFiles = FindFiles("stores");
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  3. Druk op Ctrl+S (of Cmd+S macOS) om het Program.cs bestand op te slaan.

Het programma uitvoeren

  1. Voer de volgende opdracht in het terminalvenster in om het programma uit te voeren:

    dotnet run
    
  2. In het programma moet de volgende uitvoer worden weergegeven:

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

Uitstekend. U hebt een opdrachtregelprogramma geschreven dat alle mappen in de stores map doorkruist en alle sales.json bestanden bevat die zijn gevonden.

In dit voorbeeld was het pad naar de winkelmap vrij eenvoudig en in de werkmap van het programma. In de volgende les leert u hoe u complexe structuren bouwt die in verschillende besturingssystemen werken met behulp van de Path klasse.

Vastgelopen?

Als u problemen ondervindt met het uitvoeren van het programma, volgt hier de voltooide code voor het Program.cs bestand. Vervang de inhoud van het Program.cs bestand door deze code:

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