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")
- Vraciatrue
, 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 typubool
, č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átitrue
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 typuDirectoryInfo
, viac ďalej.DirectoryName
- Vráti cestu k súboru bez jeho názvu a posledného lomítka.IsReadOnly
- Vrátitrue
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 typubool
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 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("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 typubool
hodnotutrue
, vymaže zložku vrátane súborov a podpriečinkov.Exists("zlozka")
- Vraciatrue
, ak daná zložka existuje.GetLogicalDrives()
- Vráti do stringového poľa logické disky vo formáte naprC:\
.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 preEnumerateDirectories
, iba nám tu sú vrátené názvy súborov.EnumerateFileSystemEntries("zlozka")
- 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("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 jeenum
s hodnotamiTopDirectoryOnly
aAllDirectories
. 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
- 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("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 parametertrue
, 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š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 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á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 užívateľa.HasExtension("cesta")
- Vrátitrue
, ak má daný súbor príponu.IsPathRooted("cesta")
- 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 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í.