Lekce 13 - Práce se soubory a složkami v C# .NET
C# .NET
Práce se soubory
Práce se soubory a složkami v C# .NET
English version


V minulé lekci, Výjimky v C# .NET podruhé, jsme dokončili výjimky. Dnes si popíšeme třídy v .NETu, které nejsou nijak závislé na typu souboru a jejich použití je tedy obecné. Umožňují pracovat se soubory a složkami na úrovni operačního systému, což jistě budeme v našich aplikacích potřebovat.
File
Třída File na sobě obsahuje statické metody pro obecnou práci se soubory. Se soubory můžeme jednoduše manipulovat pomocí:
- Exists("soubor") - Vrací true, pokud zadaný soubor existuje.
- Copy("zdroj", "cil") - Zkopíruje soubor ze zdrojového umístění na cílové. Můžeme zadat i třetí parametr typu bool, zda se má soubor při existenci přepsat.
- Move("zdroj", "cil") - Přesune daný soubor na cílové umístění.
- Delete("soubor") - Vymaže daný soubor.
Číst jejich atributy:
- GetAttributes("soubor") - Vrací flagový typ
FileAttributes s následujícími flagy:
- Normal
- ReadOnly
- Hidden
- System
- Directory
- Archive
- Temporary
- Compressed
- Offline
- Encrypted
A také atributy měnit:
- SetAttributes("soubor", FileAttributes) - Nastaví danému souboru dané atributy.
U souboru můžeme jednoduše zjistit jednotlivé časy:
- GetCreationTime("soubor") - Vrátí datum a čas vytvoření.
- GetLastAccessTime("soubor") - Vrátí datum a čas posledního přístupu.
- GetLastWriteTime("soubor") - Vrátí datum a čas poslední změny.
A také je změnit:
- SetCreationTime("soubor", DateTime) - Nastaví datum a čas vytvoření.
- SetLastAccessTime("soubor", DateTime) - Nastaví datum a čas posledního přístupu.
- SetLastWriteTime("soubor", DateTime) - Nastaví datum a čas poslední změny.
Všechny metody pro práci s datem a časem souborů mají ještě variantu končící na Utc pro práci s časem v mezinárodním formátu (např. GetCreationTimeUtc()).
FileInfo
Třída FileInfo je velmi podobná třídě File, avšak její metody nejsou statické. Instanci FileInfo vytvoříme pro jeden soubor a její metody se poté automaticky vztahují k tomuto souboru. Využijeme ji hlavně v případě, kdy pracujeme déle s jedním souborem a tím pádem by bylo použití File neefektivní.
Třída bere v konstruktoru jako parametr soubor, se kterým bude pracovat:
FileInfo fileInfo = new FileInfo("soubor.txt");
Vlastnosti
Opět můžeme číst či zapisovat data a časy:
- CreationTime - Datum a čas vytvoření souboru.
- LastAccessTime - Datum a čas posledního přístupu.
- LastWriteTime - Datum a čas poslední změny.
Opět existují i verze končící Utc pro světový čas.
Můžeme číst či modifikovat atributy:
- Attributes - Atributy souboru ve formátu flagů FileAttributes.
A zjistit další parametry souboru:
- Exists - Vrací true pokud soubor existuje.
- Name - Jméno souboru.
- FullName - Jméno souboru včetně cesty.
- Extension - Přípona souboru.
- Directory - Vrátí instanci rodičovské složky (typu DirectoryInfo, více dále).
- DirectoryName - Vrátí cestu k souboru bez jeho názvu a posledního lomítka.
- IsReadOnly - Zdali je soubor jen pro čtení.
- Length - Velikost souboru v bytech.
Metody
Se souborem můžeme manipulovat pomocí těchto metod:
- CopyTo("cil") - Zkopíruje soubor na dané cílové umístění. Přidáním parametru typu bool opět můžeme nastavit, zda se má soubor při existenci přepsat či nikoli.
- Delete() - Vymaže soubor.
- MoveTo("cil") - Přesune soubor na cílové umístění.
- Refresh() - Obnoví data v instanci FileInfo.
Atributy
- FullPath - Celková cesta k souboru.
- OriginalPath - Cesta, jak ji zadal uživatel.
Directory
Directory je obdoba třídy File, avšak uzpůsobená pro složky. Metody jsou opět statické, pojďme si je představit:
Metody
- CreateDirectory("slozka") - Vytvoří danou složku.
- Delete("slozka") - Vymaže danou prázdnou složku. Pokud zadáme 2. parametr typu bool s hodnotou true, vymaže složku včetně souborů a podsložek.
- Exists("slozka") - Vrací true, pokud daná složka existuje.
S daty a časy pracujeme pomocí metod:
- GetCreationTime("cesta")
- GetLastAccessTime("cesta")
- GetLastWriteTime("cesta")
- SetCreationTime("cesta")
- SetLastAccessTime("cesta")
- SetLastWriteTime("cesta")
- GetLogicalDrives() - Vrátí do stringového pole logické disky ve formátu např "C:\".
- GetParent("slozka") - Vrátí nadřazenou složku.
- Move("zdroj", "cil") - Přesune složku do cílového umístění.
- GetDirectoryRoot("slozka") - Vrátí kořen dané složky.
Můžeme zjistit nebo modifikovat aktuální složku:
- GetCurrentDirectory()
- SetCurrentDirectory("slozka")
- EnumerateDirectories("slozka") - Vrátí kolekci názvů podsložek v dané složce.
Metodě můžeme předat jako 2. parametr pattern k hledání, který obsahuje * nebo ?. Příklad patternu může tedy být "*data??", kdy bude následovat libovolný text, poté text "data" a nakonec právě 2 libovolné znaky.
Jako 3. parametr můžeme uvést ještě SearchOption, což je enum s hodnotami TopDirectoryOnly a AllDirectories. Takto můžeme tedy prohledávat i podsložky.
- EnumerateFiles("slozka") - Platí to samé, jako pro EnumerateDirectories, pouze nám zde jsou navráceny názvy souborů.
- EnumerateFileSystemEntries("slozka") - Platí to samé, jako pro EnumerateDirectories, pouze jsou nám zde navráceny jak složky, tak soubory.
Obsah složky nám navrátí také metody GetDirectories(), GetFiles() a GetFileSystemEntries(). Metody se shodují i co se týče parametrů. Jediným rozdílem je, že namísto IEnumerable vracejí pole. U IEnumerable je výhoda, že můžeme s kolekcí pracovat ještě dříve, než jsou všechny informace načteny z disku. U pole může při více souborech tato operace na chvíli program zastavit.
DirectoryInfo
DirectoryInfo je nestatická obdoba třídy Directory. Situace je stejná, jako u FIle a FileInfo. Instance se tvoří opět zadáním cesty do konstruktoru:
DirectoryInfo directoryInfo = new DirectoryInfo("C:\slozka");
Třída je velmi nápadně podobná třídě FileInfo a to proto, že jsou obě odděděny ze společného předka, třídy FileSystemInfo.
Vlastnosti
Ke čtení či změně atributů použijeme nám již dobře známé:
- Attributes - Atributy souboru ve formátu flagů FileAttributes.
Manipulace s daty a časy je opět totožná:
- CreationTime - Datum a čas vytvoření souboru. Opět existují i verze končící Utc pro světový čas.
- LastAccessTime - Datum a čas posledního přístupu.
- LastWriteTime - Datum a čas poslední změny.
Povědomé nám budou i další vlastnosti složky, které jsou stejné, jako u třídy File:
- Exists - Vrací true, pokud složka existuje.
- Name - Název složky.
- FullName - Celá cesta ke složce.
- Extension - Přípona souboru (pokud je v cestě obsažen).
- Parent - Nadřazená složka.
- Root - Kořenová složka.
Metody
- Create() - Vytvoří danou složku.
- CreateSubdirectory("cesta") - Vytvoří podsložku/podsložky v dané složce.
- Delete() - Vymaže danou složku, která musí být prázdná.
- Delete(rekurzivne) - Pokud je parametr true, budou rekurzivně vymazány i soubory a podsložky.
- MoveTo("cil") - Přesune danou složku do cílového umístění.
- Refresh - Obnoví data v instanci DirectoryInfo.
K prohledávání složky platí to samé, jako u třídy Directory, máme zde metody EnumerateDirectories(), EnumerateFiles() a EnumerateFileSystemInfos(). Název té poslední se změnil. Opět mají své protějšky i s prefixem Get, kde vracejí pole. Rozdíl je ovšem v tom, že nyní jsou nám v kolekci navráceny instance DirectoryInfo, FileInfo a FileSystemInfo, nikoli jen textové řetězce!
Atributy
- FullPath - Celková cesta ke složce.
- OriginalPath - Cesta tak, jak ji zadal uživatel.
Vysvětlili jsme si tedy třídy pro práci se soubory a třídy pro práci se složkami. Můžete použít i třídu FileSystemInfo, ta obsahuje ty metody, které byly společné jak pro práci se soubory, tak se složkami. Všechny jsme si zde již vysvětlili.
Aby byl tutoriál úplný, zmíníme se ještě o třídě Path.
Path
Path je statická třída, poskytující funkcionalitu a nastavení pro práci s cestami ke složkám či souborům.
Metody
- ChangeExtension("cesta", "přípona") - Vrátí cestu se změněnou příponou souboru.
- Combine(pole stringů) - Spojí stringy v předaném poli do cesty a tu vrátí. Metoda má další dvě přetížení, kde místo pole bere v parametrech 2, 3 nebo 4 stringy.
- GetDirectoryName("cesta") - Vrací nadřazenou složku společně s celou cestou.
- GetExtension("cesta") - Vrátí příponu souboru.
- GetFileName("cesta") - Vrátí jméno souboru.
- GetFileNameWithoutExtension("cesta") - Vrátí jméno souboru bez přípony.
- GetFullPath("cesta") - Vrátí absolutní cestu ze zadané cesty (např. z relativní).
- GetInvalidFileNameChars() - Vrací pole neplatných znaků, které se nesmějí nacházet v názvu souboru.
- GetInvalidPathChars() - Vrací pole neplatných znaků, které se nesmějí nacházet v cestě.
- GetPathRoot("cesta") - Vrací kořenovou složku dané cesty.
- GetRandomFileName() - Vrátí unikátní string, který může být použit jako název souboru.
- GetTempFileName() - Vytvoří nový dočasný soubor na disku a vrátí k němu cestu.
- GetTempPath() - Vrátí cestu ke složce s dočasnými soubory daného uživatele.
- HasExtension("cesta") - Vrátí true, pokud má daný soubor příponu.
- IsPathRooted("cesta") - Vrátí true, pokud v sobě cesta obsahuje kořen.
Atributy
Některé součásti cest jsou závislé na konkrétní platformě, přesněji na konkrétním operačním systému. Můžeme k nim přistupovat pomocí následujících atributů:
- AltDirectorySeparatorChar - Alternativní oddělovač složek, nejčastějí "/".
- DirectorySeparatorChar - Oddělovač složek, nejčastěji "\".
- PathSeparator - Oddělovač jednotlivých cest, nejčastěji ";".
- VolumeSeparatorChar - Oddělovač svazků, nejčastěji ":".
Gratuluji vám k dosažení konce kurzu o práci se soubory v C# .NET. Nyní máte dostatečné znalosti z této oblast a můžete pokračovat v kurzu Databáze v C# .NET, kde za nás práci se soubory řeší databázový systém.
Komentáře


Zobrazeno 5 zpráv z 5.