Arbeide med filbaner i .NET

Fullført

.NET har en innebygd mekanisme for å arbeide med filsystembaner.

I forrige øvelse hadde vi ikke mange mapper å analysere. Hvis du har et filsystem med mange filer og mapper, kan det være kjedelig å bygge baner manuelt. Heldigvis gir .NET noen innebygde konstanter og verktøyfunksjoner for å gjøre det enklere å håndtere filbaner.

Her lærer du om noen av konstantene og verktøyfunksjonene i System.IO navneområdet og den System.Environment typen, slik at du kan gjøre programmet smartere og mer robust.

Fastslå gjeldende katalog

Noen ganger vet du ikke i hvilken katalog eller bane programmet skal kjøre. La oss si at du vil at programmet skal bruke gjeldende katalog, men du vet ikke banen.

.NET viser hele banen til gjeldende katalog via Directory.GetCurrentDirectory metoden.

Console.WriteLine(Directory.GetCurrentDirectory());

Hvis du kjører den forrige koden fra 201-mappen i følgende struktur, returnerer Directory.GetCurrentDirectory()stores\201:

📂 stores
    📂 201

Arbeide med spesialkataloger

.NET kjører overalt: på Windows, macOS, Linux og til og med på mobile operativsystemer som iOS og Android. Hvert operativsystem har kanskje eller har kanskje ikke begrepet spesielle systemmapper (for eksempel en hjemmekatalog – som er dedikert for brukerspesifikke filer – eller en skrivebordskatalog eller en katalog for lagring av midlertidige filer).

Disse typene spesialkataloger varierer for hvert operativsystem. Det ville være tungvint å prøve å huske hvert operativsystems katalogstruktur og utføre brytere basert på gjeldende operativsystem.

Opplistingen System.Environment.SpecialFolder angir konstanter for å hente baner til spesielle systemmapper.

Følgende kode returnerer banen til tilsvarende Windows Mine dokumenter-mappen, eller brukerens HOME-katalog for et hvilket som helst operativsystem, selv om koden kjører på Linux:

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

Arbeide med baner

Baner er et emne som dukker opp så ofte at .NET inkluderer en klasse kalt Path spesielt for å arbeide med dem.

Den Path klassen er plassert i System.IO navneområdet til .NET, og trenger ikke å installeres.

Spesialbanetegn

Ulike operativsystemer bruker forskjellige tegn for å skille katalognivåer.

Windows bruker for eksempel omvendt skråstrek (stores\201) og macOS bruker skråstreken (stores/201).

Hvis du vil hjelpe deg med å bruke riktig tegn, inneholder Path klassen DirectorySeparatorChar feltet.

.NET tolker dette feltet automatisk til skilletegnet som gjelder for operativsystemet når du må bygge en bane manuelt.

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

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

Sammenføyningsbaner

Klassen Path fungerer med konseptet fil- og mappebaner, som bare er strenger. Du kan bruke Path-klassen til automatisk å bygge riktige baner for bestemte operativsystemer.

Hvis du for eksempel vil hente banen til mappen butikker/201, kan du bruke Path.Combine-funksjonen til å gjøre dette.

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

Husk at du bør bruke Path.Combine eller Path.DirectorySeparatorChar klasse i stedet for hardkodingsstrenger, fordi programmet kanskje kjører på mange forskjellige operativsystemer. Klassen Path formaterer alltid banene riktig for operativsystemet den kjører på.

Tips

Den Path klassen bryr seg ikke om ting faktisk eksisterer. Baner er konseptuelle, ikke fysiske, og klassen bygger og analyserer strenger for deg.

Fastslå filtyper

Klassen Path kan også fortelle deg filtypen til et filnavn. Hvis du har en fil og vil vite om den er en JSON-fil, kan du bruke Path.GetExtension-funksjonen.

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

Få alt du trenger å vite om en fil eller bane

Klassen Path inneholder mange ulike metoder som gjør forskjellige ting. Du kan få mest mulig informasjon om en katalog eller en fil ved hjelp av henholdsvis DirectoryInfo eller FileInfo klasser.

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 finnes mange flere nyttige egenskaper og verktøymetoder på Path-, DirectoryInfo- og FileInfo-klassene, men disse kjernekonseptene er de du sannsynligvis vil bruke oftest. I neste øvelse skriver du baner og identifiserer .json filer.