Práce s cestami k souborům v .NET
.NET má integrovaný mechanismus pro práci s cestami systému souborů.
V předchozím cvičení jsme neměli k analýze mnoho složek. Pokud máte systém souborů s mnoha soubory a složkami, může být ruční sestavování cest zdlouhavé. .NET naštěstí poskytuje některé předdefinované konstanty a utility funkce, které usnadňují zpracování cest k souborům.
Tady se dozvíte o některých konstantách a pomocných funkcích v System.IO
oboru názvů a System.Environment
typu, abyste mohli program chytřejší a odolnější.
Určení aktuálního adresáře
Někdy nevíte, ve kterém adresáři nebo cestě má program běžet. Řekněme, že chcete, aby váš program používal aktuální adresář, ale neznáte cestu.
.NET zpřístupňuje úplnou cestu k aktuálnímu adresáři přes metodu Directory.GetCurrentDirectory
.
Console.WriteLine(Directory.GetCurrentDirectory());
Pokud spustíte předchozí kód ze složky 201 v následující struktuře, Directory.GetCurrentDirectory()
vrátí se stores\201
:
📂 stores
📂 201
Práce se speciálními adresáři
.NET běží všude: ve Windows, macOS, Linuxu a dokonce i v mobilních operačních systémech, jako je iOS a Android. Každý operační systém může nebo nemusí mít koncept speciálních systémových složek (například domovského adresáře, který je vyhrazený pro soubory specifické pro uživatele) nebo desktopového adresáře nebo adresáře pro ukládání dočasných souborů).
Tyto typy speciálních adresářů se pro každý operační systém liší. Bylo by těžkopádné pamatovat si adresářovou strukturu jednotlivých operačních systémů a provádět přepínače na základě aktuálního operačního systému.
Výčet System.Environment.SpecialFolder
určuje konstanty pro načtení cest ke speciálním systémovým složkám.
Následující kód vrátí cestu ke složce Windows My Documents nebo domovskému adresáři uživatele pro jakýkoli operační systém, i když je kód spuštěný v Linuxu:
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Práce s cestami
Cesty jsou předmět, který se objevuje tak často, že .NET obsahuje třídu, která je volána Path
speciálně pro práci s nimi.
Třída Path
je umístěna v System.IO
oboru názvů rozhraní .NET a nemusí být nainstalována.
Speciální znaky používané v cestách
Různé operační systémy používají k oddělení úrovní adresářů různé znaky.
Například Systém Windows používá zpětné lomítko (stores\201
) a macOS používá lomítko (stores/201
).
Pro snazší použití správného znaku obsahuje třída Path
pole DirectorySeparatorChar
.
.NET automaticky interpretuje toto pole do znaku oddělovače, který se vztahuje na operační systém, když potřebujete vytvořit cestu ručně.
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
Spojovací cesty
Třída Path
pracuje s konceptem cest k souborům a složkám, což jsou pouhé řetězce. Třídu Path
můžete použít k automatickému sestavování správných cest pro konkrétní operační systémy.
Pokud byste například chtěli získat cestu ke složce stores/201, můžete k tomu použít funkci Path.Combine
.
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
Mějte na paměti, že byste měli místo pevně zakódovacích řetězců použít Path.Combine
třídu nebo Path.DirectorySeparatorChar
třídu, protože váš program může běžet v mnoha různých operačních systémech. Třída Path
vždy správně formátuje cesty pro operační systém, na kterém běží.
Tip
Třída Path
se nezajímá, jestli věci skutečně existují. Cesty jsou koncepční, ne fyzické a třída vytváří a parsuje řetězce za vás.
Určení přípon souborů
Třída Path
vám také může říct příponu názvu souboru. Pokud máte soubor a chcete zjistit, jestli se jedná o soubor JSON, můžete použít Path.GetExtension
funkci.
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
Získání všeho, co potřebujete vědět o souboru nebo cestě
Třída Path
obsahuje množství různých metod, které dělají různé věci. Nejvíce informací o adresáři nebo souboru můžete získat pomocí tříd DirectoryInfo
a FileInfo
(v uvedeném pořadí).
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
Existuje mnoho užitečnějších vlastností a metod utility na Path
, DirectoryInfo
a FileInfo
třídy, ale tyto základní koncepty jsou ty, které pravděpodobně používáte nejčastěji. V dalším cvičení sestavíte cesty a identifikujete soubory .json.