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í.
IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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.

Dnes si popíšeme triedy v .NETe, ktoré nie sú nijak závislé od typu súboru a ich použitie je teda všeobecné. Umožňujú pracovať so súbormi a priečinkami na úrovni operačného systému, čo určite budeme v našich aplikáciách potrebovať.

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:

  • 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.
Čítať ich atribúty:
  • GetAttributes(" súbor ") - Vracia flagový typ FileAttributes s nasledujúcimi flagmi:
    • Normal
    • ReadOnly
    • Hidden
    • System
    • Directory
    • Archive
    • Temporary
    • Compressed
    • Offline
    • Encrypted
A tiež atribúty meniť:
  • SetAttributes(" súbor ", FileAttributes) - Nastaví danému súboru dané atribúty.
U súboru môžeme jednoducho zistiť jednotlivé časy:
  • 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ž ich zmeniť:
  • 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. GetCreationTimeUtc()).

FileInfo

Trieda FileInfo je veľmi podobná triede File, avšak jej metódy nie sú statické. Inštanciu 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 File neefektívne.

Trieda berie v konštruktore ako parameter súbor, s ktorým bude pracovať:

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

Vlastnosti

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

  • 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 Utc pre svetový čas.

Môžeme čítať alebo modifikovať atribúty:

  • Attributes - Atribúty súboru vo formáte flagov FileAttributes.

A zistiť ďalšie parametre súboru:

  • Exists - Vracia 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 - Či je súbor len na čítanie.
  • Length - Veľkosť súboru v bytoch.
Metódy

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 FileInfo.
Atribúty
  • FullPath - Celková cesta k súboru.
  • OriginalPath - Cesta, ako ju zadal používateľ.
Directory

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

Metódy

  • CreateDirectory(" zlozka ") - Vytvorí danú zložku.
  • Delete(" zlozka ") - Vymaže danú prázdnu zložku. Ak zadáme 2. parameter typu bool s hodnotou true, vymaže zložku vrátane súborov a podpriečinkov.
  • Exists(" zlozka ") - Vracia true, ak daná zložka existuje.
S dátami a časmi pracujeme pomocou metód:
  • GetCreationTime(" cesta ")
  • GetLastAccessTime(" cesta ")
  • GetLastWriteTime(" cesta ")
  • SetCreationTime(" cesta ")
  • SetLastAccessTime(" cesta ")
  • SetLastWriteTime(" cesta ")
  • 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.
Môžeme zistiť alebo modifikovať aktuálnu zložku:
  • GetCurrentDirectory()
  • SetCurrentDirectory(" zlozka ")
  • EnumerateDirectories(" zlozka ") - Vráti kolekciu názvov podpriečinkov v danej zložke.
Metóde môžeme odovzdať ako 2. parameter pattern na hľadanie, ktorý obsahuje * alebo ?. Príklad patternu môže byť "*data??", kedy bude nasledovať ľubovoľný text, potom text "data" a nakoniec práve 2 ľubovoľné znaky.

Ako 3. parameter môžeme uviesť ešte SearchOption, čo je enum s hodnotami TopDirectoryOnly a AllDirectories. Takto môžeme teda prehľadávať aj podzložky.

  • 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.
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 program zastaviť.

DirectoryInfo

DirectoryInfo je nestatická obdoba triedy Directory. Situácia je rovnaká, ako pri 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 a to preto, že sú obe oddedené zo spoločného predka, triedy FileSystemInfo.

Vlastnosti

Na čítanie či zmenu atribútov použijeme nám už dobre známe:

  • Attributes - Atribúty súboru vo formáte flagov FileAttributes.

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

  • CreationTime - Dátum a čas vytvorenia súboru. Opäť existujú aj verzie končiace Utc pre svetový čas.
  • LastAccessTime - Dátum a čas posledného prístupu.
  • LastWriteTime - Dátum a čas poslednej zmeny.
Povedomé nám budú aj ďalšie vlastnosti zložky, ktoré sú rovnaké, ako pri triede 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.
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 pri triede Directory, máme tu metódy EnumerateDirectories(), EnumerateFiles() a EnumerateFileSystemInfos(). Názov tej poslednej sa zmenil. Opäť majú svoje náprotivky aj s prefixom Get, kde vracajú polia. 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!

Atribúty

  • FullPath - Celková cesta k zložke.
  • OriginalPath - Cesta tak, ako ju zadal používateľ.
Vysvetlili sme si teda triedy pre prácu so súbormi a triedy pre prácu so zložkami. Môžete použiť aj triedu FileSystemInfo, tá 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.

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

Path

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

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 2, 3 alebo 4 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. 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ň.
Atribúty

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 atribútov:

  • 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 ":".
Gratulujem vám k dosiahnutiu konca kurzu o práci so súbormi v C# .NET. Teraz máte dostatočné znalosti z tejto oblasti a môžete pokračovať v kurze Databáza v C# .NET, kde za nás prácu so súbormi rieši databázový systém.

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