Werken met bestandspaden in .NET
.NET heeft een ingebouwd mechanisme voor het werken met bestandssysteempaden.
In de vorige oefening hebben we niet veel mappen om te parseren. Als u een bestandssysteem met veel bestanden en mappen hebt, kan het handmatig bouwen van paden vervelend zijn. Gelukkig biedt .NET een aantal ingebouwde constanten en hulpprogrammafuncties om het gemakkelijker te maken bestandspaden te verwerken.
Hier leert u meer over enkele van de constanten en hulpprogrammafuncties in de System.IO
naamruimte en het System.Environment
type, zodat u uw programma slimmer en toleranter kunt maken.
De huidige directory bepalen
Soms weet u niet in welke map of welk pad uw programma moet worden uitgevoerd. Stel dat u wilt dat uw programma de huidige map gebruikt, maar u weet het pad niet.
.NET toont het volledige pad naar de huidige map via de Directory.GetCurrentDirectory
-methode.
Console.WriteLine(Directory.GetCurrentDirectory());
Als u de voorgaande code uitvoert vanuit de map 201 in de volgende structuur, Directory.GetCurrentDirectory()
retourneert stores\201
u:
📂 stores
📂 201
Werken met speciale mappen
.NET wordt overal uitgevoerd: op Windows, macOS, Linux en zelfs op mobiele besturingssystemen zoals iOS en Android. Elk besturingssysteem heeft mogelijk of niet het concept van speciale systeemmappen (zoals een basismap, die is toegewezen voor gebruikersspecifieke bestanden, of een bureaubladmap of een map voor het opslaan van tijdelijke bestanden).
Deze typen speciale mappen verschillen voor elk besturingssysteem. Het zou lastig zijn om de mapstructuur van elk besturingssysteem te onthouden en schakelopties uit te voeren op basis van het huidige besturingssysteem.
Met de System.Environment.SpecialFolder
-opsomming worden constanten gespecificeerd voor het ophalen van paden naar speciale systeemmappen.
De volgende code retourneert het pad naar het equivalent van de map Mijn documenten van Windows of de basismap van de gebruiker voor elk besturingssysteem, zelfs als de code wordt uitgevoerd op Linux:
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Werken met paden
Paden zijn een onderwerp dat zo vaak voorkomt dat .NET een klasse bevat die specifiek wordt aangeroepen Path
om ermee te werken.
De Path
klasse bevindt zich in de System.IO
naamruimte van .NET en hoeft niet te worden geïnstalleerd.
Speciale tekens voor paden
In verschillende besturingssystemen worden verschillende tekens gebruikt om mapniveaus te scheiden.
Windows gebruikt bijvoorbeeld de backslash (stores\201
) en macOS maakt gebruik van de slash (stores/201
).
Om u te helpen het juiste teken te gebruiken, bevat de klasse Path
het veld DirectorySeparatorChar
.
In .NET wordt dat veld automatisch geïnterpreteerd in het scheidingsteken dat van toepassing is op het besturingssysteem wanneer u handmatig een pad moet maken.
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
Join-paden
Voor de Path
-klasse wordt het concept van bestands- en mappaden gebruikt; dit zijn simpelweg tekenreeksen. U kunt de Path
klasse gebruiken om automatisch juiste paden te bouwen voor specifieke besturingssystemen.
Als u bijvoorbeeld het pad naar de stores/201-map wilt ophalen, kunt u hiervoor de Path.Combine
-functie gebruiken.
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
Vergeet niet dat u de Path.Combine
of Path.DirectorySeparatorChar
klasse moet gebruiken in plaats van tekenreeksen met hardcodering, omdat uw programma mogelijk wordt uitgevoerd op veel verschillende besturingssystemen. De Path
klasse formatteert de paden altijd correct voor het besturingssysteem waarop deze wordt uitgevoerd.
Tip
De Path
klas geeft er niet om of dingen daadwerkelijk bestaan. Paden zijn conceptueel, niet fysiek en de klasse bouwt en parseert tekenreeksen voor u.
Bestandsnaamextensies bepalen
De Path
klasse kan u ook de extensie van een bestandsnaam vertellen. Als u een bestand hebt en u wilt weten of het een JSON-bestand is, kunt u de Path.GetExtension
functie gebruiken.
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
Alles ophalen wat u over een bestand of pad moet weten
De Path
-klasse bevat veel verschillende methoden waar u verschillende bewerkingen mee kunt uitvoeren. U krijgt de meeste informatie over een map of bestand door gebruik te maken van respectievelijk de klassen DirectoryInfo
en 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
Er zijn veel meer nuttige eigenschappen en hulpprogrammamethoden op de Path
, DirectoryInfo
en FileInfo
klassen, maar deze kernconcepten zijn de concepten die u waarschijnlijk het meest zult gebruiken. In de volgende oefening gaat u paden opstellen en .json-bestanden identificeren.