NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 typu bool, 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í 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 - Vrátí true pokud 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 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 typu FileInfo.

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 typu bool hodnotu true, 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 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.

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ž je enum s hodnotami TopDirectoryOnly a AllDirectories. 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 parametr true, 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 instanci DirectoryInfo.

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í.


 

Předchozí článek
Výjimky v C# .NET podruhé
Všechny články v sekci
Soubory v C# .NET
Přeskočit článek
(nedoporučujeme)
Kvíz - XML, serializace, soubory a složky v C# .NET
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
51 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity