Arbejd med filstier i .NET

Fuldført

.NET har en indbygget mekanisme til at arbejde med filsystemstier.

I den forrige øvelse havde vi ikke mange mapper at fortolke. Hvis du har et filsystem med mange filer og mapper, kan det være kedeligt at oprette stier manuelt. Heldigvis indeholder .NET nogle indbyggede konstanter og funktionsfunktioner, der gør det nemmere at håndtere filstier.

Her får du mere at vide om nogle af konstanterne og hjælpefunktionerne i System.IO navneområdet og den System.Environment type, så du kan gøre dit program smartere og mere robust.

Fastlæg den aktuelle mappe

Nogle gange ved du ikke, hvilken mappe eller sti dit program skal køre i. Lad os sige, at du ønsker, at programmet skal bruge den aktuelle mappe, men du ikke kender stien.

.NET viser den fulde sti til den aktuelle mappe via metoden Directory.GetCurrentDirectory.

Console.WriteLine(Directory.GetCurrentDirectory());

Hvis du kører den foregående kode fra mappen 201 i følgende struktur, returnerer Directory.GetCurrentDirectory()stores\201:

📂 stores
    📂 201

Arbejd med specialmapper

.NET kører overalt: på Windows, macOS, Linux og endda på mobile operativsystemer som iOS og Android. Hvert operativsystem har måske eller måske ikke begrebet specialsystemmapper (f.eks. en hjemmemappe – som er dedikeret til brugerspecifikke filer – eller en skrivebordsmappe eller en mappe til lagring af midlertidige filer).

Disse typer specialmapper varierer for hvert operativsystem. Det ville være besværligt at forsøge at huske hvert operativsystems mappestruktur og udføre parametre baseret på det aktuelle operativsystem.

Optællingen System.Environment.SpecialFolder angiver konstanter for at hente stier til specialsystemmapper.

Følgende kode returnerer stien til det, der svarer til mappen Windows Dokumenter, eller brugerens HOME mappe for et hvilket som helst operativsystem, også selvom koden kører på Linux:

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

Arbejd med stier

Stier er et emne, der kommer så ofte, at .NET indeholder en klasse, der kaldes Path specifikt til at arbejde med dem.

Klassen Path er placeret i navneområdet System.IO i .NET og behøver ikke at være installeret.

Specialstitegn

Forskellige operativsystemer bruger forskellige tegn til at adskille mappeniveauer.

Windows bruger f.eks. omvendt skråstreg (stores\201), og macOS bruger skråstregen (stores/201).

For at hjælpe dig med at bruge det korrekte tegn indeholder Path-klassen feltet DirectorySeparatorChar.

.NET fortolker automatisk dette felt til det separatortegn, der gælder for operativsystemet, når du skal oprette en sti manuelt.

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

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

Joinstier

Klassen Path fungerer sammen med begrebet fil- og mappestier, som kun er strenge. Du kan bruge klassen Path til automatisk at oprette korrekte stier til bestemte operativsystemer.

Hvis du f.eks. vil hente stien til mappen stores/201, kan du bruge funktionen Path.Combine til at gøre det.

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

Husk, at du skal bruge klassen Path.Combine eller Path.DirectorySeparatorChar i stedet for hard-coding-strenge, da dit program muligvis kører på mange forskellige operativsystemer. Klassen Path formaterer altid stierne korrekt for det operativsystem, den kører på.

Drikkepenge

Den Path klasse er ligeglad med, om tingene faktisk findes. Stier er konceptuelle, ikke fysiske, og klassen bygger og fortolker strenge for dig.

Bestem filtypenavne

Klassen Path kan også fortælle dig filtypenavnet. Hvis du har en fil, og du vil vide, om det er en JSON-fil, kan du bruge funktionen Path.GetExtension.

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

Få alt, hvad du behøver at vide om en fil eller sti

Klassen Path indeholder mange forskellige metoder, der gør forskellige ting. Du kan få de fleste oplysninger om en mappe eller en fil ved hjælp af klasserne DirectoryInfo eller 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

Der er mange flere nyttige egenskaber og hjælpemetoder i klasserne Path, DirectoryInfoog FileInfo, men disse kernebegreber er dem, du sandsynligvis bruger oftest. I den næste øvelse skal du oprette stier og identificere .json filer.