IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
Mezi 13:00 až cca 16:00 proběhne odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.

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.

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

Čí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(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() 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ě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 ":".

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.

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í:
49 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