Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

13. diel - Práca so súbormi a priečinkami v C# .NET

V minulej lekcii, Výnimky v C# .NET druhýkrát, sme dokončili výnimky.

V dnešnom C# .NET tutoriále si popíšeme triedy File, FileInfo, Directory, DirectoryInfo a Path, ktoré sa používajú na prácu so súbormi a priečinkami na úrovni operačného systému.

Trieda File

Trieda File na sebe obsahuje statické metódy pre všeobecnú prácu so súbormi. So súbormi môžeme jednoducho manipulovať pomocou metód:

  • Exists("súbor") - Vracia true, ak zadaný súbor existuje.
  • Copy("zdroj", "cieľ") - Skopíruje súbor zo zdrojového umiestnenia na cieľové. Môžeme zadať aj tretí parameter typu bool, či sa má súbor pri existencii prepísať.
  • Move("zdroj", "cieľ") - Presunie daný súbor na cieľové umiestnenie.
  • Delete("súbor") - Vymaže daný súbor.

Atribúty súborov

Pri súboroch môžeme čítať ich atribúty pomocou metódy GetAttributes("súbor"), ktorá vracia flagový typ FileAttributes s nasledujúcimi flagmi:

  • Normal,
  • ReadOnly,
  • Hidden,
  • System,
  • Directory,
  • Archive,
  • Temporary,
  • Compressed,
  • Offline,
  • Encrypted.

Atribúty súborov je možné aj meniť a to metódou SetAttributes("súbor", FileAttributes), ktorá nastaví súboru súbor atribúty FileAttributes.

Dátumy a časy súborov

U súboru môžeme jednoducho zistiť jednotlivé dátumy a časy pomocou metód:

  • GetCreationTime("súbor") - Vráti dátum a čas vytvorenia.
  • GetLastAccessTime("súbor") - Vráti dátum a čas posledného prístupu.
  • GetLastWriteTime("súbor") - Vráti dátum a čas poslednej zmeny.

A tiež dátumy a časy meniť pomocou metód:

  • SetCreationTime("súbor", DateTime) - Nastaví dátum a čas vytvorenia.
  • SetLastAccessTime("súbor", DateTime) - Nastaví dátum a čas posledného prístupu.
  • SetLastWriteTime("súbor", DateTime) - Nastaví dátum a čas poslednej zmeny.

Všetky metódy pre prácu s dátumom a časom súborov majú ešte variant končiaci na Utc pre prácu s časom v medzinárodnom formáte, napríklad GetCreationTimeUtc().

Trieda FileInfo

Trieda FileInfo je veľmi podobná triede File, avšak jej metódy nie sú statické. Inštanciu typu FileInfo vytvoríme pre jeden súbor a jej metódy sa potom automaticky vzťahujú k tomuto súboru. Využijeme ju hlavne v prípade, keď pracujeme dlhšie s jedným súborom a tým pádom by bolo použitie triedy File neefektívne.

Trieda FileInfo berie v parametri konštruktora súbor, s ktorým bude pracovať:

FileInfo fileInfo = new FileInfo("súbor.txt");

Vlastnosti triedy FileInfo

Opäť môžeme čítať či zapisovať dátumy a časy pomocou vlastností:

  • CreationTime - Dátum a čas vytvorenia súboru.
  • LastAccessTime - Dátum a čas posledného prístupu.
  • LastWriteTime - Dátum a čas poslednej zmeny.

Opäť existujú aj verzie končiace na Utc pre svetový čas.

Vlastnosti pre atribúty a parametre súborov

Pomocou inštancie triedy FileInfo môžeme čítať či modifikovať atribúty súborov pomocou vlastnosti Attributes vo formáte flagov FileAttributes.

Ďalej môžeme zistiť ďalšie parametre súboru pomocou vlastností:

  • Exists - Vráti true ak súbor existuje.
  • Name - Meno súboru.
  • FullName - Meno súboru vrátane cesty.
  • Extension - Prípona súboru.
  • Directory - Vráti inštanciu rodičovskej zložky typu DirectoryInfo, viac ďalej.
  • DirectoryName - Vráti cestu k súboru bez jeho názvu a posledného lomítka.
  • IsReadOnly - Vráti true ak je súbor len na čítanie.
  • Length - Veľkosť súboru v bytoch.
  • FullPath - Celková cesta k súboru.
  • OriginalPath - Cesta, ako ju zadal používateľ.

Metódy triedy FileInfo

So súborom môžeme manipulovať pomocou týchto metód:

  • CopyTo("cieľ") - Skopíruje súbor na dané cieľové umiestnenie. Pridaním parametra typu bool opäť môžeme nastaviť, či sa má súbor pri existencii prepísať alebo nie.
  • Delete() - Vymaže súbor.
  • MoveTo("cieľ") - Presunie súbor na cieľové umiestnenie.
  • Refresh() - Obnoví dáta v inštancii typu FileInfo.

Trieda Directory

Trieda Directory je obdoba triedy File, avšak prispôsobená pre zložky. Metódy sú opäť statické, poďme si ich predstaviť.

Metódy triedy Directory

Uvedieme si metódy pre prácu s dátumom a časom a zložkami.

Metódy pre prácu s dátumom a časom

Pre prácu s dátumom a časom máme k dispozícii metódy:

  • GetCreationTime("cesta"),
  • GetLastAccessTime("cesta"),
  • GetLastWriteTime("cesta"),
  • SetCreationTime("cesta"),
  • SetLastAccessTime("cesta"),
  • SetLastWriteTime("cesta").

Metódy pre prácu so zložkami

Na prácu so zložkami môžeme využiť metódy:

  • CreateDirectory("zlozka") - Vytvorí zložku.
  • Delete("zlozka") - Vymaže prázdnu zložku. Ak zadáme v druhom parametri typu bool hodnotu true, vymaže zložku vrátane súborov a podpriečinkov.
  • Exists("zlozka") - Vracia true, ak daná zložka existuje.
  • GetLogicalDrives() - Vráti do stringového poľa logické disky vo formáte napr C:\.
  • GetParent("zlozka") - Vráti nadradenú zložku.
  • Move("zdroj", "cieľ") - Presunie zložku do cieľového umiestnenia.
  • GetDirectoryRoot("zlozka") - Vráti koreň danej zložky.
  • EnumerateDirectories("zlozka") - Vráti kolekciu názvov podpriečinkov v danej zložke.
  • EnumerateFiles("zlozka") - Platí to isté, ako pre EnumerateDirectories, iba nám tu sú vrátené názvy súborov.
  • EnumerateFileSystemEntries("zlozka") - Platí to isté, ako pre EnumerateDirectories, iba sú nám tu vrátené ako zložky, tak súbory.

Ďalej môžeme zistiť alebo modifikovať aktuálnu zložku pomocou metód GetCurrentDirectory() a SetCurrentDirectory("zlozka"). Týmto metódam môžeme odovzdať:

  • v druhom parametri pattern na hľadanie, ktorý obsahuje * alebo ?, napríklad "*data??", v ktorom bude nasledovať ľubovoľný text, potom text "data" a nakoniec práve dva ľubovoľné znaky.
  • v treťom parametri SearchOption, čo je enum s hodnotami TopDirectoryOnly a AllDirectories. Takto môžeme teda prehľadávať aj podzložky.

Obsah zložky nám vrátia aj metódy GetDirectories(), GetFiles() a GetFileSystemEntries(). Metódy sa zhodujú aj čo sa týka parametrov. Jediným rozdielom je, že namiesto IEnumerable vracajú pole. Pri IEnumerable je výhoda, že môžeme s kolekciou pracovať ešte skôr, ako sú všetky informácie načítané z disku. Pri pole môže pri viacerých súboroch táto operácia na chvíľu zastaviť program.

Trieda DirectoryInfo

Trieda DirectoryInfo je nestatická obdoba triedy Directory. Situácia je rovnaká, ako u tried File a FileInfo. Inštancia sa tvorí opäť zadaním cesty do konštruktora:

DirectoryInfo directoryInfo = new DirectoryInfo("C:\zlozka");

Trieda je veľmi nápadne podobná triede FileInfo. Sú totiž obe oddedené zo spoločného predka, triedy FileSystemInfo.

Vlastnosti triedy DirectoryInfo

Na čítanie či zmenu atribútov súborov použijeme nám už dobre známu vlastnosť Attributes vo formáte flagov FileAttributes.

Manipulácia s dátumami a časmi je opäť totožná:

  • CreationTime - Dátum a čas vytvorenia súboru.
  • LastAccessTime - Dátum a čas posledného prístupu.
  • LastWriteTime - Dátum a čas poslednej zmeny.

Opäť existujú aj verzie končiace na Utc pre svetový čas.

Povedomé nám budú aj ďalšie vlastnosti pre zložky, ktoré sú rovnaké, ako u triedy File:

  • Exists - Vracia true, ak zložka existuje.
  • Name - Názov zložky.
  • FullName - Celá cesta k zložke.
  • Extension - Prípona súboru (ak je v ceste obsiahnutá).
  • Parent - Nadradená zložka.
  • Root - Koreňová zložka.
  • FullPath - Celková cesta k zložke.
  • OriginalPath - Cesta tak, ako ju zadal používateľ.

Metódy triedy DirectoryInfo

Na inštancii triedy DirectoryInfo môžeme použiť metódy:

  • Create() - Vytvorí danú zložku.
  • CreateSubdirectory("cesta") - Vytvorí podzložku/podzložky v danej zložke.
  • Delete() - Vymaže danú zložku, ktorá musí byť prázdna.
  • Delete(rekurzívne) - Ak je parameter true, budú rekurzívne vymazané aj súbory a podpriečinky.
  • MoveTo("cieľ") - Presunie danú zložku do cieľového umiestnenia.
  • Refresh – obnoví údaje v inštancii DirectoryInfo.

Na prehľadávanie zložky platí to isté, ako u triedy Directory. Máme tu metódy:

  • EnumerateDirectories(),
  • EnumerateFiles(),
  • EnumerateFileSystemInfos().

Metódy majú opäť svoje náprotivky s prefixom Get, kde vracajú pole. Rozdiel je však v tom, že teraz sú nám v kolekcii vrátené inštancie DirectoryInfo, FileInfo a FileSystemInfo, nie len textové reťazce.

Aby bol tutoriál úplný, zmienime sa ešte o triede Path.

Trieda Path

Path je statická trieda, poskytujúca funkcionalitu a nastavenie pre prácu s cestami k zložkám či súborom.

Metódy triedy Path

Na triede Path môžeme volať tieto metódy:

  • ChangeExtension("cesta", "prípona") - Vráti cestu so zmenenou príponou súboru.
  • Combine(pole stringov) - Spojí stringy v odovzdanom poli do cesty a tú vráti. Metóda má ďalšie dve preťaženia, kde namiesto poľa berie v parametroch dva, tri alebo štyri stringy.
  • GetDirectoryName("cesta") - Vracia nadradenú zložku spoločne s celou cestou.
  • GetExtension("cesta") - Vráti príponu súboru.
  • GetFileName("cesta") - Vráti meno súboru.
  • GetFileNameWithoutExtension("cesta") - Vráti meno súboru bez prípony.
  • GetFullPath("cesta") - Vráti absolútnu cestu zo zadanej cesty, napríklad z relatívnej.
  • GetInvalidFileNameChars() - Vracia pole neplatných znakov, ktoré sa nesmú nachádzať v názve súboru.
  • GetInvalidPathChars() - Vracia pole neplatných znakov, ktoré sa nesmú nachádzať v ceste.
  • GetPathRoot("cesta") - Vracia koreňovú zložku danej cesty.
  • GetRandomFileName() - Vráti unikátny string, ktorý môže byť použitý ako názov súboru.
  • GetTempFileName() - Vytvorí nový dočasný súbor na disku a vráti k nemu cestu.
  • GetTempPath() - Vráti cestu k priečinku s dočasnými súbormi daného užívateľa.
  • HasExtension("cesta") - Vráti true, ak má daný súbor príponu.
  • IsPathRooted("cesta") - Vráti true, ak v sebe cesta obsahuje koreň.

Vlastnosti pre atribúty súborov

Niektoré súčasti ciest sú závislé od konkrétnej platformy, presnejšie od konkrétneho operačného systému. Môžeme k nim pristupovať pomocou nasledujúcich vlastností:

  • AltDirectorySeparatorChar - Alternatívny oddeľovač zložiek, najčastejšie "/".
  • DirectorySeparatorChar - Oddeľovač zložiek, najčastejšie "\".
  • PathSeparator - Oddeľovač jednotlivých ciest, najčastejšie ";".
  • VolumeSeparatorChar - Oddeľovač zväzkov, najčastejšie ":".

Vysvetlili sme si teda triedy pre prácu so súbormi a priečinkami. Môžeme použiť aj triedu FileSystemInfo, ktorá obsahuje tie metódy, ktoré boli spoločné ako pre prácu so súbormi, tak so zložkami. Všetky sme si tu už vysvetlili.

V nasledujúcom kvíze, Kvíz - XML, serializácia, súbory a zložky v C# .NET, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Výnimky v C# .NET druhýkrát
Všetky články v sekcii
Súbory v C# .NET
Preskočiť článok
(neodporúčame)
Kvíz - XML, serializácia, súbory a zložky v C# .NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity