Oefening: met het bestandssysteem werken
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.
Open Visual Studio Code.
Selecteer Terminal weergeven>in het hoofdmenu om een terminalvenster te openen.
(Optioneel) Ga in het terminalvenster naar een map waarnaar u de bestanden wilt kopiëren, zoals
c:\MyProjects
.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
Voer de volgende opdracht uit om een nieuw .NET Console-project te maken:
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
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.
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.
Vouw in het Verkenner-venster onder mslearn-dotnet-files de map stores en elk van de genummerde mappen binnen uit.
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
Selecteer in het Verkenner-venster het
Program.cs
bestand om het te openen in de editor.Plak de volgende code in de eerste regel van het
Program.cs
bestand om deSystem.IO
enSystem.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.
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; }
Voeg de volgende code toe onder de
using
instructies om deFindFiles
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); }
Druk op Ctrl+S (of Cmd+S macOS) om het
Program.cs
bestand op te slaan.
Het programma uitvoeren
Voer de volgende opdracht in het terminalvenster in om het programma uit te voeren:
dotnet run
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;
}