Práce s cestami k souborům v .NET

Dokončeno

.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, DirectoryInfoa 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.