Lekce 13 - Práce se soubory a složkami v C# .NET
V minulé lekci, Výjimky v C# .NET podruhé, jsme dokončili výjimky.
V dnešním C# .NET tutoriálu si popíšeme třídy
File, FileInfo, Directory,
DirectoryInfo a Path, které se používají pro
práci se soubory a složkami na úrovni operačního
systému.
Třída File
Třída File na sobě obsahuje statické metody
pro obecnou práci se soubory. Se soubory můžeme jednoduše manipulovat
pomocí metod:
Exists("soubor")- Vracítrue, pokud zadaný soubor existuje.Copy("zdroj", "cíl")- Zkopíruje soubor ze zdrojového umístění na cílové. Můžeme zadat i třetí parametr typubool, zda se má soubor při existenci přepsat.Move("zdroj", "cíl")- Přesune daný soubor na cílové umístění.Delete("soubor")- Vymaže daný soubor.
Atributy souborů
U souborů můžeme číst jejich atributy pomocí metody
GetAttributes("soubor"), která vrací flagový typ
FileAttributes s následujícími flagy:
Normal,ReadOnly,Hidden,System,Directory,Archive,Temporary,Compressed,Offline,Encrypted.
Atributy souborů je možné i měnit a to metodou
SetAttributes("soubor", FileAttributes), která nastaví
souboru soubor atributy FileAttributes.
Datumy a časy souborů
U souboru můžeme jednoduše zjistit jednotlivé datumy a časy pomocí metod:
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é datumy a časy měnit pomocí metod:
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 datumem a časem souborů mají
ještě variantu končící na Utc pro práci s časem v
mezinárodním formátu, například GetCreationTimeUtc().
Třída FileInfo
Třída FileInfo je velmi podobná třídě File,
avšak její metody nejsou statické. Instanci typu
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í třídy
File neefektivní.
Třída FileInfo bere v parametru konstruktoru soubor, se
kterým bude pracovat:
FileInfo fileInfo = new FileInfo("soubor.txt");
Vlastnosti třídy
FileInfo
Opět můžeme číst či zapisovat datumy a časy pomocí vlastností:
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í na Utc pro
světový čas.
Vlastnosti pro atributy a parametry souborů
Pomocí instance třídy FileInfo můžeme číst či
modifikovat atributy souborů pomocí vlastnosti Attributes ve
formátu flagů FileAttributes.
Dále můžeme zjistit další parametry souboru pomocí vlastností:
Exists- Vrátítruepokud 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 typuDirectoryInfo, více dále.DirectoryName- Vrátí cestu k souboru bez jeho názvu a posledního lomítka.IsReadOnly- Vrátítruepokud je soubor jen pro čtení.Length- Velikost souboru v bytech.FullPath- Celková cesta k souboru.OriginalPath- Cesta, jak ji zadal uživatel.
Metody třídy FileInfo
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 typuboolopě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 typuFileInfo.
Třída Directory
Třída 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 třídy Directory
Uvedeme si metody pro práci s datumem a časem a složkami.
Metody pro práci s datumem a časem
Pro práci s datumem a časem máme k dispozici metody:
GetCreationTime("cesta"),GetLastAccessTime("cesta"),GetLastWriteTime("cesta"),SetCreationTime("cesta"),SetLastAccessTime("cesta"),SetLastWriteTime("cesta").
Metody pro práci se složkami
Pro práci se složkami můžeme využít metody:
CreateDirectory("slozka")- Vytvoří složku.Delete("slozka")- Vymaže prázdnou složku. Pokud zadáme v druhém parametru typuboolhodnotutrue, vymaže složku včetně souborů a podsložek.Exists("slozka")- Vracítrue, pokud daná složka existuje.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.EnumerateDirectories("slozka")- Vrátí kolekci názvů podsložek v dané složce.EnumerateFiles("slozka")- Platí to samé, jako proEnumerateDirectories, pouze nám zde jsou navráceny názvy souborů.EnumerateFileSystemEntries("slozka")- Platí to samé, jako proEnumerateDirectories, pouze jsou nám zde navráceny jak složky, tak soubory.
Dále můžeme zjistit nebo modifikovat aktuální složku pomocí metod
GetCurrentDirectory() a
SetCurrentDirectory("slozka"). Těmto metodám můžeme
předat:
- v druhém parametru pattern k hledání, který obsahuje
*nebo?, například"*data??", v kterém bude následovat libovolný text, poté text"data"a nakonec právě dva libovolné znaky. - Třetí parametr
SearchOption, což jeenums hodnotamiTopDirectoryOnlyaAllDirectories. Takto můžeme tedy prohledávat i podsložky.
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 zastavit program.
Třída DirectoryInfo
Třída DirectoryInfo je nestatická obdoba třídy
Directory. Situace je stejná, jako u tříd 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. Jsou totiž obě odděděny ze společného předka,
třídy FileSystemInfo.
Vlastnosti třídy
DirectoryInfo
Ke čtení či změně atributů souborů použijeme nám již dobře známou
vlastnost Attributes ve formátu flagů
FileAttributes.
Manipulace s datumy a časy je opět totožná:
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í na Utc pro
světový čas.
Povědomé nám budou i další vlastnosti pro 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žena).Parent- Nadřazená složka.Root- Kořenová složka.FullPath- Celková cesta ke složce.OriginalPath- Cesta tak, jak ji zadal uživatel.
Metody třídy
DirectoryInfo
Na instanci třídy DirectoryInfo můžeme použít 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(rekurzivně)- Pokud je parametrtrue, budou rekurzivně vymazány i soubory a podsložky.MoveTo("cíl")- Přesune danou složku do cílového umístění.Refresh- Obnoví data v instanciDirectoryInfo.
K prohledávání složky platí to samé, jako u třídy
Directory. Máme zde metody:
EnumerateDirectories(),EnumerateFiles(),EnumerateFileSystemInfos().
Metody mají opět své protějšky 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.
Aby byl tutoriál úplný, zmíníme se ještě o třídě
Path.
Třída Path
Path je statická třída, poskytující
funkcionalitu a nastavení pro práci s cestami ke
složkám či souborům.
Metody třídy Path
Na třídě Path můžeme volat tyto 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 dva, tři nebo čtyři 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říklad 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.
Vlastnosti pro atributy souborů
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 vlastností:
AltDirectorySeparatorChar- Alternativní oddělovač složek, nejčastěji"/".DirectorySeparatorChar- Oddělovač složek, nejčastěji"\".PathSeparator- Oddělovač jednotlivých cest, nejčastěji";".VolumeSeparatorChar- Oddělovač svazků, nejčastěji":".
Vysvětlili jsme si tedy třídy pro práci se soubory a
složkami. Můžeme použít i třídu
FileSystemInfo, která 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.
V následujícím kvízu, Kvíz - XML, serializace, soubory a složky v C# .NET, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


David se informační technologie naučil na