Met het bestandssysteem werken

Voltooid

.NET bevat ingebouwde typen voor het werken met het bestandssysteem die u in de System.IO naamruimte kunt vinden.

Hier vindt u informatie over de typen die beschikbaar zijn System.IO met behulp van C# om een bestandssysteem te lezen om bestanden en mappen te detecteren.

Het scenario

Grote retailers schrijven vaak gegevens naar bestanden, zodat ze later in batches kunnen worden verwerkt.

Bij Tailwind Traders laten ze elke winkel hun totale verkoop naar een bestand schrijven en moet de winkel dat bestand naar een centrale locatie verzenden. Voor het gebruik van deze bestanden moet het bedrijf een batchproces maken dat met het bestandssysteem kan werken.

De System.IO-naamruimte opnemen

De System.IO naamruimte bevat ingebouwde typen waarmee u kunt communiceren met bestanden en mappen. U kunt bijvoorbeeld verzamelingen bestanden en mappen ophalen op basis van zoekcriteria en getset eigenschappen voor bestanden en mappen. U kunt ook naamruimtetypen gebruiken System.IO om synchroon en asynchroon gegevensstromen en bestanden te lezen en schrijven.

Voor nu richten we ons op wat u moet weten om met mappen te werken met behulp van de Directory-klasse in de System.IO-naamruimte. De directoryklasse bevat statische methoden voor het maken, verplaatsen en inventariseren van mappen en submappen.

Een overzicht weergeven van alle mappen

De Directory klasse wordt vaak gebruikt om mappen weer te geven (of op te sommen). De bestandsstructuur van Tailwind Traders heeft bijvoorbeeld een hoofdmap met de naam Stores. In die map bevinden zich submappen die zijn geordend op winkelnummer, en in die mappen staan de verkoop- en voorraadbestanden. De structuur ziet er als volgt uit:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

Gebruik de functie om de namen van de mappen op het Directory.EnumerateDirectories hoogste niveau te lezen en weer te geven.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

Een overzicht weergeven van bestanden in een specifieke map

Gebruik de functie Directory.EnumerateFiles om een overzicht weer te geven van de namen van alle bestanden in een bepaalde map.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

Een overzicht weergeven van alle inhoud van een map en alle submappen

Zowel de functie Directory.EnumerateDirectories als de functie Directory.EnumerateFiles hebben een overbelasting die een parameter accepteert om op te geven dat zoekpatroonbestanden en mappen moeten overeenkomen.

Deze functies hebben ook een andere overbelasting met een parameter om aan te geven of u recursief door een specifieke map en bijbehorende submappen kunt bladeren.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

In de volgende oefening gebruikt u de Directory klasse om dynamisch de hoofdopslagmap van Tailwind Traders te lezen om alle sales.json bestanden te vinden.

Kennis testen

1.

Welke van de volgende taken kunt u uitvoeren met Directory.EnumerateFiles?