Arbeta med filsökvägar i .NET
.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
, DirectoryInfo
och 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.