Arbeta med filsökvägar i .NET

Slutförd

.NET har en inbyggd mekanism för att arbeta med filsystemsökvägar.

I föregående övning hade vi inte många mappar att parsa. Om du har ett filsystem med många filer och mappar kan det vara tråkigt att skapa sökvägar manuellt. Tack och lov tillhandahåller .NET några inbyggda konstanter och verktygsfunktioner för att göra det enklare att hantera filsökvägar.

Här lär du dig om några av konstanterna och verktygsfunktionerna System.IO i namnområdet och System.Environment typen så att du kan göra programmet smartare och mer motståndskraftigt.

Fastställa den aktuella katalogen

Ibland vet du inte i vilken katalog eller sökväg programmet ska köras. Anta att du vill att programmet ska använda den aktuella katalogen, men du känner inte till sökvägen.

I .NET exponeras den fullständiga sökvägen till den aktuella katalogen via metoden Directory.GetCurrentDirectory.

Console.WriteLine(Directory.GetCurrentDirectory());

Om du kör föregående kod från mappen 201 i följande struktur Directory.GetCurrentDirectory() returnerar stores\201:

📂 stores
    📂 201

Arbeta med särskilda kataloger

.NET körs överallt: i Windows, macOS, Linux och även på mobila operativsystem som iOS och Android. Varje operativsystem kanske eller kanske inte har begreppet särskilda systemmappar (till exempel en hemkatalog – som är dedikerad för användarspecifika filer – eller en skrivbordskatalog eller en katalog för lagring av temporära filer).

Dessa typer av särskilda kataloger skiljer sig åt för varje operativsystem. Det skulle vara besvärligt att försöka komma ihåg varje operativsystems katalogstruktur och utföra växlar baserat på det aktuella operativsystemet.

Uppräkningen System.Environment.SpecialFolder anger konstanter för att hämta sökvägar till särskilda systemmappar.

Följande kod returnerar sökvägen till motsvarigheten till mappen Windows Mina dokument eller användarens HOME-katalog för alla operativsystem, även om koden körs på Linux:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Arbeta med sökvägar

Sökvägar är ett ämne som dyker upp så ofta att .NET innehåller en klass som kallas Path specifikt för att arbeta med dem.

Klassen Path finns i System.IO namnområdet för .NET och behöver inte installeras.

Särskilda tecken för sökvägar

Olika operativsystem använder olika tecken för att avgränsa katalognivåer.

Till exempel använder Windows omvänt snedstreck (stores\201) och macOS använder snedstrecket (stores/201).

För att hjälpa dig att använda rätt specialtecken innehåller Path-klassen fältet DirectorySeparatorChar.

.NET tolkar automatiskt fältet till det avgränsartecken som gäller för operativsystemet när du behöver skapa en sökväg manuellt.

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

Kopplingssökvägar

I klassen Path används fil- och mappsökvägar i form av strängar. Du kan använda Path klassen för att automatiskt skapa rätt sökvägar för specifika operativsystem.

Om du till exempel vill hämta sökvägen till mappen stores/201 kan du göra det med hjälp av funktionen Path.Combine.

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

Kom ihåg att du bör använda Path.Combine klassen eller Path.DirectorySeparatorChar i stället för hårdkodningssträngar, eftersom programmet kanske körs på många olika operativsystem. Klassen Path formaterar alltid sökvägarna korrekt för det operativsystem som den körs på.

Dricks

Klassen Path bryr sig inte om huruvida saker faktiskt finns. Sökvägar är konceptuella, inte fysiska, och klassen skapar och parsar strängar åt dig.

Fastställa filnamnstillägg

Klassen Path kan också berätta ett filnamnstillägg. Om du har en fil och vill veta om det är en JSON-fil kan du använda Path.GetExtension funktionen.

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

Ta reda på allt du behöver veta om en fil eller sökväg

Klassen Path innehåller flera olika metoder som gör olika saker. Du kan få ut mest information om en katalog eller en fil med hjälp av klassen DirectoryInfo respektive FileInfo.

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

Det finns många fler användbara egenskaper och verktygsmetoder i klasserna Path, DirectoryInfooch FileInfo , men dessa grundläggande begrepp är de som du förmodligen använder oftast. I nästa övning kommer du att skapa sökvägar och identifiera .json-filer.