13. diel - Práca so súbormi a priečinkami v C# .NET
V predchádzajúcej lekcii, Výnimky v C# .NET druhýkrát, sme dokončili výnimky.
V dnešnej lekcii C# .NET ** 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 obsahuje statické metódy na
všeobecnú prácu so súbormi. So súbormi môžeme jednoducho manipulovať
pomocou metód:
Exists("file")- Vraciatrue, ak zadaný súbor existuje.Copy("source", "target")- Skopíruje súbor zo zdrojového umiestnenia na cieľové. Môžeme zadať aj tretí parameter typubool, či sa má súbor pri existencii prepísať.Move("source", "target")- Presunie daný súbor na cieľové umiestnenie.Delete("file")- Vymaže daný súbor.
Atribúty súborov
Pri súboroch môžeme čítať ich atribúty pomocou metódy
GetAttributes("file"), 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("file", FileAttributes), ktorá nastaví súboru
file 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("file")- Vráti dátum a čas vytvorenia.GetLastAccessTime("file")- Vráti dátum a čas posledného prístupu.GetLastWriteTime("file")- Vráti dátum a čas poslednej zmeny.
A tiež dátumy a časy meniť pomocou metód:
SetCreationTime("file", DateTime)- Nastaví dátum a čas vytvorenia.SetLastAccessTime("file", DateTime)- Nastaví dátum a čas posledného prístupu.SetLastWriteTime("file", DateTime)- Nastaví dátum a čas poslednej zmeny.
Všetky metódy na 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ú na tento súbor. 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("file.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átitrueak 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 typuDirectoryInfo, viac ďalej.DirectoryName- Vráti cestu k súboru bez jeho názvu a poslednej lomky.IsReadOnly- Vrátitrueak 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("target")- Skopíruje súbor na dané cieľové umiestnenie. Pridaním parametra typuboolopäť môžeme nastaviť, či sa má súbor pri existencii prepísať alebo nie.Delete()- Vymaže súbor.MoveTo("target")- Presunie súbor na cieľové umiestnenie.Refresh()- Obnoví dáta v inštancii typuFileInfo.
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("path"),GetLastAccessTime("path"),GetLastWriteTime("path"),SetCreationTime("path"),SetLastAccessTime("path"),SetLastWriteTime("path").
Metódy pre prácu so zložkami
Na prácu so zložkami môžeme využiť metódy:
CreateDirectory("directory")- Vytvorí zložku.Delete("directory")- Vymaže prázdnu zložku. Ak zadáme v druhom parametri typuboolhodnotutrue, vymaže zložku vrátane súborov a podpriečinkov.Exists("directory")- Vraciatrue, ak daná zložka existuje.GetLogicalDrives()- Vráti do stringového poľa logické disky vo formáte naprC:\.GetParent("directory")- Vráti nadradenú zložku.Move("source", "target")- Presunie zložku do cieľového umiestnenia.GetDirectoryRoot("directory")- Vráti koreň danej zložky.EnumerateDirectories("directory")- Vráti kolekciu názvov podpriečinkov v danej zložke.EnumerateFiles("directory")- Platí to isté, ako preEnumerateDirectories, vrátené sú tu názvy súborov.EnumerateFileSystemEntries("directory")- Platí to isté, ako preEnumerateDirectories, 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("directory"). 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 jeenums hodnotamiTopDirectoryOnlyaAllDirectories. 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 poli 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:\directory");
Trieda je veľmi nápadne podobná triede FileInfo.
Obe sú totiž zdedené 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- Vraciatrue, 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("path")- Vytvorí podzložku/podzložky v danej zložke.Delete()- Vymaže danú zložku, ktorá musí byť prázdna.Delete(true/false)- Ak je parametertrue, budú rekurzívne vymazané aj súbory a podpriečinky.MoveTo("target")- Presunie danú zložku do cieľového umiestnenia.Refresh– obnoví údaje v inštanciiDirectoryInfo.
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 bola lekcia úplná, spomenieme si ešte triedu 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("path", "suffix")- Vráti cestu so zmenenou príponou súboru.Combine(string array)- 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("path")- Vracia nadradenú zložku spoločne s celou cestou.GetExtension("path")- Vráti príponu súboru.GetFileName("path")- Vráti meno súboru.GetFileNameWithoutExtension("path")- Vráti meno súboru bez prípony.GetFullPath("path")- 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("path")- Vracia koreňovú zložku danej cesty.GetRandomFileName()- Vráti unikátnystring, 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 používateľa.HasExtension("path")- Vrátitrue, ak má daný súbor príponu.IsPathRooted("path")- Vrátitrue, 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 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 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í.

David sa informačné technológie naučil na