Arbeta med filsystemet
.NET innehåller inbyggda typer för att arbeta med filsystemet som du kan hitta i System.IO
namnområdet.
Här lär du dig mer om de typer som är tillgängliga i System.IO
med hjälp av C# för att läsa ett filsystem för att identifiera filer och kataloger.
Scenariot
Stora återförsäljare skriver ofta data till filer så att de kan bearbetas senare i batchar.
Varje butik hos Tailwind Traders skriver sin försäljningssumma till en fil och skickar filen till en central plats. För att kunna använda dessa filer måste företaget skapa en batchprocess som fungerar med filsystemet.
Ta med namnrymden System.IO
Det System.IO namnområdet innehåller inbyggda typer som gör att du kan interagera med filer och kataloger. Du kan till exempel hämta samlingar med filer och kataloger baserat på sökkriterier och get
egenskaper set
för filer och kataloger. Du kan också använda System.IO
namnområdestyper för att synkront och asynkront läsa och skriva dataströmmar och filer.
För tillfället fokuserar vi på det som du behöver veta för att arbeta med kataloger med hjälp av klassen Directory
i namnrymden System.IO
. Klassen Directory exponerar statiska metoder för att skapa, flytta och räkna upp via kataloger och underkataloger.
Visa en lista över alla kataloger
Klassen Directory
används ofta för att lista ut (eller räkna upp) kataloger. Tailwind Traders-filstrukturen har till exempel en rotmapp med namnet stores. I den mappen finns undermappar ordnade efter butiksnummer, och inuti dessa mappar finns försäljnings- och inventeringsfilerna. Strukturen ser ut så här:
📂 stores
📄 sales.json
📄 totals.txt
📂 201
📄 sales.json
📄 salestotals.json
📄 inventory.txt
📂 202
Om du vill läsa igenom och lista namnen på katalogerna på den översta nivån använder du Directory.EnumerateDirectories
funktionen.
IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");
foreach (var dir in listOfDirectories) {
Console.WriteLine(dir);
}
// Outputs:
// stores/201
// stores/202
Visa en lista över filer i en viss katalog
Om du vill visa en lista över namnen på alla filer i en katalog kan du använda funktionen Directory.EnumerateFiles
.
IEnumerable<string> files = Directory.EnumerateFiles("stores");
foreach (var file in files)
{
Console.WriteLine(file);
}
// Outputs:
// stores/totals.txt
// stores/sales.json
Lista allt innehåll i en katalog och alla underkataloger
Både funktionen Directory.EnumerateDirectories
och Directory.EnumerateFiles
har en överlagring som kan ta en parameter för att ange att sökmönsterfiler och kataloger måste matcha.
De har också en annan överlagring som tar en parameter för att indikera om en angiven mapp och alla dess undermappar ska gås igenom rekursivt.
// 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
I nästa övning använder Directory
du klassen för att dynamiskt läsa igenom Tailwind Traders huvudarkivkatalog för att hitta alla sales.json filer.