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 ")
- 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.
GetAttributes(" súbor ")
- Vracia flagový typFileAttributes
s nasledujúcimi flagmi:Normal
ReadOnly
Hidden
System
Directory
Archive
Temporary
Compressed
Offline
Encrypted
SetAttributes(" súbor ", FileAttributes)
- Nastaví danému súboru dané atribúty.
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.
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.
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.
Utc
pre svetový čas.
Môžeme čítať alebo modifikovať atribúty:
Attributes
- Atribúty súboru vo formáte flagovFileAttributes
.
A zistiť ďalšie parametre súboru:
Exists
- Vraciatrue
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
- Či je súbor len na čítanie.Length
- Veľkosť súboru v bytoch.
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štanciiFileInfo
.
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 typubool
s hodnotoutrue
, vymaže zložku vrátane súborov a podpriečinkov.Exists(" zlozka ")
- Vraciatrue
, ak daná zložka existuje.
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 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.
GetCurrentDirectory()
SetCurrentDirectory(" zlozka ")
EnumerateDirectories(" zlozka ")
- Vráti kolekciu názvov podpriečinkov v danej zložke.
*
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 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.
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 flagovFileAttributes
.
Manipulácia s dátami a časmi je opäť totožná:
CreationTime
- Dátum a čas vytvorenia súboru. Opäť existujú aj verzie končiaceUtc
pre svetový čas.LastAccessTime
- Dátum a čas posledného prístupu.LastWriteTime
- Dátum a čas poslednej zmeny.
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.
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
.
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ľ.
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á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ň.
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":"
.
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í.