3. diel - Práca s textovými súbormi vo VB.NET
V minulom dieli seriálu tutoriálov pre VB.NET, Úvod do práce so súbormi , sme si ukázali, ako fungujú prístupové práva v systémoch Windows.
Najjednoduchšou cestou, ako uložiť dáta aplikácie na pevný disk, je využiť textové súbory. Sa súbory s príponou .txt ste sa iste všetci už stretli. Text je v nich uložený jednoducho na jednotlivých riadkoch. Na oddelenie riadkov sa využíva špeciálnych znakov, ktoré sú bohužiaľ špecifické pre každý operačný systém. Toto však za nás našťastie vyrieši Visual Basic .NET.
Pozn .: V rôznych materiáloch sa môžete stretnúť s použitím rôznych tried a rôznych spôsobov na zápis do súborov. .NET framework sa v čase vyvíjal a pre niektoré funkčnosti poskytuje kvôli kompatibilite aj staršie alebo komplikovanejšie konštrukcie. Budem sa tu snažiť ukazovať spôsobmi, ktoré sú najjednoduchšie a najnovšie.
Zápis textu do nového súboru
Najprv si poďme vytvoriť nový textový súbor a niečo do neho zapísať. Vytvorte si nový projekt (konzolovú aplikáciu) s názvom TextoveSoubory. K zapisovanie do textových súborov nám .NET poskytuje triedu StreamWriter.
V zdrojovom kóde si najprv do Imports pridajme System.IO. Teraz vytvorme blok Using a založme v ňom novú inštanciu StreamWriter. Ako už vieme z predchádzajúcich dielov, Using sa nám automaticky postará o zatvorenie súboru po dokončení zápisu / čítania. Do konstruktoru napíšeme cestu k nášmu súboru.
Using sw As New StreamWriter("soubor.txt") End Using
Náš StreamWriter je teraz nasmerovaný na správny súbor. Nový riadok zapíšeme pomocou metódy WriteLine. Po dokončení zápise musíme zavolať metódu Flush, ktorá sa stará o vyprázdnenie bufferu. S tým sa tu nebudeme zaťažovať, postačí nám vedieť, že nami zapísané riadky môžu zostať chvíľu vo vyrovnávacej pamäti a my pomocou Flush vynútime ich zápis.
Kód sa nám teda rozrástol a môže vyzerať napr. Nasledovne:
Using sw As New StreamWriter("soubor.txt") sw.WriteLine("První řádek") sw.WriteLine("Tento text je na druhém řádku") sw.WriteLine("A do třetice.") sw.Flush() End Using
Po spustení sa vytvorí file.txt v zložke s naším projektom, presnejšie v bin / debug. Ako sa správne vo VB.NET vysporiadať s cestou k súboru a právami sme si už ukazovali a tu to pre jednoduchosť zanedbáme. Vidíme, že súbor existuje a naozaj obsahuje náš text:
Pripísanie textu do existujúceho súboru
Ak súbor neexistuje, kód vyššie ho vytvorí. Ak existuje, bude prepísaný. Toto správanie môžeme zmeniť pomocou 2. parametra konštruktory objektu StreamWriter. Pokiaľ ho nastavíme na True, vykoná sa tzv. Append (pripísania). Takto do existujúceho súboru pripíšeme nový riadok:
Using sw As New StreamWriter("soubor.txt", True) sw.WriteLine("První řádek") sw.WriteLine("Tento text je na druhém řádku") sw.WriteLine("A do třetice.") sw.Flush() End Using
Ďalším parametrom môže byť nastavenie kódovania, ale predvolený UTF-8 bude bohato stačiť.
Čítanie existujúceho súboru
Zostáva nám už len vedieť súbor načítať. Nie je to o nič zložitejšie, než zápis a opäť k tomu máme v .NET frameworku pripravenú triedu, konkrétne StreamReader. Použitie je podobné, namiesto metódy WriteLine použijeme ReadLine, ktorá vracia riadok textu zo súboru a zároveň sa presunie na riadok nasledujúci. Budeme ju teda volať vo while cyklu. Podmienka pre ošetrenie vyjdenie zo súboru je možná krkolomnejšie, kontrolujeme, či prebehlo priradenie nové riadky do premennej.
Kód k výpisu obsahu súboru do konzoly by vyzeral takto:
Using sr As New StreamReader("soubor.txt") While Not sr.EndOfStream Console.WriteLine(sr.ReadLine()) End While End Using
Vlastnosť EndOfStream udáva či je v prúde ešte niečo ďalej.
Kód celého nášho programu vyzerá teraz asi takto:
' zápis do souboru Using sw As New StreamWriter("soubor.txt", True) sw.WriteLine("První řádek") sw.WriteLine("Tento text je na druhém řádku") sw.WriteLine("A do třetice.") sw.Flush() End Using Console.WriteLine("Do souboru bylo zapsáno.") ' připsání souboru Using sw As New StreamWriter("soubor.txt", True) sw.WriteLine("Připsaný řádek") sw.Flush() End Using Console.WriteLine("Do souboru bylo přiosáno.") ' výpis obsahu souboru Using sr As New StreamReader("soubor.txt") While Not sr.EndOfStream Console.WriteLine(sr.ReadLine()) End While End Using Console.ReadKey()
A výsledok:
Nepodporili sme odchytávanie výnimiek a kontrolu práv. Do súborov tiež budeme chcieť väčšinou ukladať skôr objekty, než riadky textu.
To všetko si ukážeme nabudúce, Uloženie objektov do CSV vo VB.NET .