IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Úvod do práce so súbormi

V minulej lekcii, Výnimky, sme si vysvetlili výnimky, ktoré na prácu so súbormi nutne potrebujeme, pretože vďaka nim môžeme reagovať na prípadné chyby.

V dnešnom tutoriále Súbory v C# .NET si povieme niečo o súboroch všeobecne a o právach na zápis v systémoch Windows. Po dočítaní tohto C# .NET tutoriálu budete pripravení so súbormi pracovať.

Dáta, respektíve objekty uložené v pamäti, sa samozrejme s vypnutím aplikácie stratia. Ak chceme zaistiť, aby dáta boli takzvane perzistentné (trvalé), musíme ich pri ukončení programu uložiť a pri načítaní programu opäť načítať. Na ukladanie dát aplikácie existuje mnoho spôsobov, každý má nejaké výhody a nevýhody. Všeobecne môžeme ukladať dáta našej aplikácie nasledujúcim spôsobom:

  • Textové súbory s plochou štruktúrou (takzvane flat files, .txt a .csv).
  • Textové súbory s vnútornou hierarchiou (napríklad .xml alebo .json).
  • Súbory binárneho typu (jednoducho odtlačok pamäte do súboru).
  • Databáza.

Každý spôsob uloženia dát má svoje výhody a nevýhody. My si jednotlivé spôsoby v kurze podrobne popíšeme a hlavne vyskúšame. Zameriame sa najmä na to, ako do súborov ukladať objekty a potom ich znova načítať. Databázam sa potom venuje samostatná sekcia.

Práva na zápis v systémoch Windows

Windows 7 zápisové práva UAC - Súbory v C# .NET

Od Windows Vista existuje v systémoch Windows takzvaný UAC (User Account Control). Technológia zakazuje zápis na systémový oddiel disku (najčastejšie C:\) v prípade, že zápis nie je povolený administrátorom alebo že nejde o zápis do osobných zložiek užívateľa. Toto opatrenie samozrejme naplnilo diskusné fóra o programovaní a rozbilo množstvo aplikácií. Dôležité však je, že toto opatrenie je správne a iba zabraňuje zle napísaným aplikáciám meniť, čo sa im zapáči. Linuxové systémy majú podobné opatrenia už dlhú dobu.

Koncepcia systému Windows zahŕňa užívateľské účty. Každý užívateľský účet je realizovaný zložkou (väčšinou C:\users\user_name). Táto zložka obsahuje okrem iného dokumenty, pracovnú plochu a tiež takzvanú zložku s dátami aplikácií. K tomuto priečinku sa dá dostať pri zadaní kľúča %appdata% do cesty.

Skúsme si %appdata% napísať do cesty prieskumníka a zložku otvoriť. Uvidíme, že v priečinku má svoje podpriečinky mnoho aplikácií, ktoré máme nainštalované. Práve tu je miesto pre nastavenie našich aplikácií a ďalšie dáta. Naša aplikácia si tu samozrejme vytvorí zložku so svojim menom a do tej si bude všetko ukladať. Nebudeme obmedzovaní UAC a zároveň bude naša aplikácia umožňovať iné nastavenia pre rôznych užívateľov bez toho, aby sme to v C# programovali. %appdata% mieri vždy k priečinku aktuálne prihláseného používateľa.

Veľkou chybou bolo, že si programy ukladali dáta do zložky s programom. Program na ploche alebo na starých Windows fungoval, avšak keď sa potom nainštaloval do priečinka Program Files/ na disku C:\, spadol s chybou pri zápise na disk. Windows tento zápis čiastočne pre určité aplikácie emulovala, ale tým sa nebudeme zaoberať. Problém sa dá samozrejme obísť tým, že aplikáciu spustíme ako správca, ale to je zlé riešenie.

V tejto lekcii si ukážeme, ako vytvoriť v AppData\ zložku pre našu aplikáciu. V ďalších lekciách už v kóde táto logika nebude obsiahnutá a budú slúžiť ako čo najjednoduchšia ukážka práce so súbormi. Pokiaľ budeme aplikáciu prevádzkovať na svojom počítači, nemusíme sa o nič starať. Akonáhle ju však budete publikovať, je vhodné ju upraviť tak, aby AppData\ používala. Už teda vieme, kam budeme zapisovať. Výnimky sme si uviedli tiež. Presuňme sa teda k samotnej práci so súbormi.

IO a stream

V .NET existuje takzvaný stream, čo je všeobecný "dátový prúd". Na prúd sa napojíme a môžeme z neho potom načítať dáta alebo do neho dáta naopak zapisovať. Prúd je teoreticky univerzálny a ten istý prúd sa môže nachádzať v pamäti RAM alebo v súbore na disku. Práca so súbormi je teda realizovaná práve cez stream a všetky triedy, ktoré si v budúcnosti uvedieme, stream nejakým spôsobom obaľujú alebo s ním pracujú. My sme od neho však odtienení. Pre prácu so súbormi musíme do programu vložiť odkaz na príslušný menný priestor, v ktorom sa logika nachádza:

using System.IO;

V tomto kurze sa budeme v každej lekcii zaoberať jedným typom súboru a ukážeme si vždy tú triedu, ktorá je na to prispôsobená. Teraz si ukážme úplný základ toho, ako vytvoriť pre našu aplikáciu zložku v AppData\ aktuálneho užívateľa. Budeme na to používať triedu Directory, ktoré obsahuje statické metódy na prácu so zložkami. Ďalej sa pozrieme aj na triedu File.

Tak môžeme dáta (napríklad súbor settings.dat) vytvoriť s predvolenými hodnotami alebo ich načítať. Pre prácu s cestou použijeme triedu Path. Všetky tri triedy budú podrobne vysvetlené v samostatnej lekcii, teraz si ukážeme len to nevyhnutné. Poďme teda napísať aplikáciu, ktorá bude mať vlastný priečinok v AppData\ a pozrie sa, či existuje jej súbor database.dat. Nezabudnite pridať using System.IO:

string path = "";
try
{
    path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ICTdemy");
    if (!Directory.Exists(path))
        Directory.CreateDirectory(path);
}
catch
{
    Console.WriteLine("Program failed to create a {0} folder, please check your privileges.", path);
}
if (File.Exists(Path.Combine(path, "database.dat")))
{
    try
    {
        // Place your code for loading your settings from the file here
    }
    catch (Exception e)
    {
        Console.WriteLine("Error while loading the settings: {0}", e.Message);
    }
}
else
{
    try
    {
        // Place your code for creating your settings here
    }
    catch (Exception e)
    {
        Console.WriteLine("Error while creating the settings: {0}", e.Message);
    }
}

Najprv si uložíme cestu k priečinku s našou aplikáciou do textového reťazca path. Lokáciu AppData\ získame pomocou:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

Tak trochu by sa dalo očakávať, že namiesto tohto pôjde napísať iba "%appdata%", ale bohužiaľ C# skratku na cestu neprevedie. GetFolderPath() nám teda vráti niečo také (záleží na verzii Windows):

C:\Users\your_name\AppData\Roaming

Do cesty pridáme ešte zložku s menom našej aplikácie. Meno sme zvolili ICTdemy, samozrejme si ho potom upravte. Aby sme nemuseli premýšľať, či cesty obsahujú na konci lomeno alebo či má byť lomeno spätné alebo obyčajné, spojíme cestu pomocou statickej metódy Combine() na triede Path. V path je teda teraz toto:

C:\Users\your_name\AppData\Roaming\ICTdemy

Pokiaľ daná zložka neexistuje (jedná sa o prvé spustenie aplikácie), tak ju vytvoríme. Ďalej sa pozrieme, či existuje súbor, z ktorého chceme dáta načítať. Pokiaľ áno, vykonáme načítanie dát. Ak nie, súbor vytvoríme a nahráme do neho predvolené dáta. Alebo súbor vytvárať ani nebudeme, záleží na type aplikácie.

Po spustení kódu sa nám v zložke AppData\ objaví nová zložka:

Appdata a tvorenie zložky aplikácie v C# .NET - Súbory v C# .NET

Máme teda rýchly úvod, ako správne ukladať dáta aplikácie. Ešte si radšej zopakujme, že v nasledujúcich lekciách kvôli jednoduchosti nebudem riešiť zápisové práva a programy budú fungovať len v zložkách užívateľa (napríklad pri spustení z Visual Studia). Vždy sa teda vráťte sem a kód si upravte, pokiaľ hotovú aplikáciu budete chcieť šíriť. O výnimkách sme si tiež povedali.

V nasledujúcej lekcii, Práca s textovými súbormi v C# .NET, si vysvetlíme prácu s textovými súbormi (s príponou .txt) v C# .NET. Ukážeme si použitie triedy StreamWriter a StreamReader pre zápis, pripisovanie a čítanie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 2x (50.32 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Výnimky
Všetky články v sekcii
Súbory v C# .NET
Preskočiť článok
(neodporúčame)
Práca s textovými súbormi 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