IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Typy súborov a správne umiestnenie súborov v C ++

V minulej lekcii, Úvod do práce so súbormi v jazyku C ++ , sme si ukázali ako zapisovať do textových súborov v C ++ a ako z nich čítať. Spomenuli sme si rozdiel medzi formátovanými a neformátovanými operáciami a vytvorili ukážkové príklady. V dnešnom C ++ tutoriálu sa najskôr pozrieme na teoretická fakty o súboroch. Ďalej si niečo povieme o právach pre zápis v operačných systémoch Windows a Linux a ako sa s nimi vysporiadať.

Spôsoby uloženie dát

Všetky súbory v našom počítači sú viacmenej dvoch typov a to buď textové alebo binárne.

Textové súbory

Textové súbory si môžeme predstaviť ako jednotlivé riadky textu a sú ľudsky čitateľné v nejakom textovom editore (napr. V Poznámkový blok). Môžu byť tzv. Ploché alebo môžu mať vnútornú štruktúru.

Ploché súbory (flat files)

Ploché textové súbory nemajú žiadnu výraznú vnútornú štruktúru. Môžeme medzi ne zaradiť napr. List:

Drahá Brynn,
opatruj se, Malcolm unikl a jistě si pro mne brzy přijde jako pro prvního.
Musíš navést Brandona, dovést ho k amuletu, klíčem k zaříkávadlu by možná
mohla být levandulová růže.

Kallak

Alebo uloženie osôb telefónneho zoznamu tak, že každú osobu uložíme na samostatnú riadku a jej vlastnosti oddelíme bodkočiarkami. (Tomuto formátu hovoríme CSV, čo je skratka z C Omma S eparated V alues, hodnoty oddelené čiarkou alebo bodkočiarkou):

Jan Novák;731589641
Karel Nový;728412656
Tomáš Marný;603482145

Ak ukladáme nejaké nastavenie, môžeme zvoliť zápis podobný ini súborom:

velikost_pisma=10
hlasitost=15
barva=modra

Hierarchickej súbory

Hierarchické súbory sú textové súbory, ktoré okrem samotných dát a oddeľovačov obsahujú nejaké pokročilejšie formátovanie a dokážu uložené položky zoskupovať do zložitejších štruktúr. Klasickým príkladom tohto typu súboru je napr. XML, ktorý je navyše samopopisný. C ++ ako také s týmito súbormi pracovať nevedia a sami by sme takú knižnicu písali len veľmi ťažko. Našťastie existujú už hotové knižnice pre prácu s takýmito súbormi a tak máme prácu značne uľahčenú. Ukážme si len pre úplnosť ako XML súbor vyzerá:

<?xml version="1.0" encoding="UTF-8" ?>
<uzivatele>
        <uzivatel vek="22">
                <jmeno>Pavel Slavík</jmeno>
                <registrovan>21.3.2000</registrovan>
        </uzivatel>
        <uzivatel vek="22">
                <jmeno>Jan Novák</jmeno>
                <registrovan>30.10.2012</registrovan>
        </uzivatel>
</uzivatele>

Binárne súbory

Dáta je možné okrem do textovej podoby uložiť tzv. Binárne. Jednoducho vezmeme tú časť pamäte RAM, kde je uložený používateľ (alebo čokoľvek iné), a uložíme tieto jednotky a nuly úplne rovnako na pevný disk. Takýto súbor nebude ľudsky vôbec čitateľný a ak ho otvoríme v textovom editore, uvidíme len náhodnú zmes bajtov, ktorú sa nám editor zúfalo pokúsi zobraziť ako text, ale veľmi nám to nepomôže.

ŕétśKw?&·ßąÚŚXzý]wçuҦÂŕĄK֘u×u<'żř§FyíÚ&yě+óB÷qÍ÷{}ű8]ľńâ4YôŤĹľ ¶SúT@˝»úó&ŕ…7¨ď^iŻ˝>SVÔŰ=%sCúżz·:vç*Ó–ÉFÝvĐŰć۲xZIčőÍ»˙»{e‡ú9sĆ´”sĐÜĺ;ä5őÓ[îńŻëź~M=Żt?ů}€ż›8ŢĄ3ĘŐß«ĄK˝€óÖĎV-6kz:h]  `bą˙ţűóŞlB?e"¨M7§L{ózeo:dţ.úĚôĽŰEŹÁőĆU°¶ËLŮiÍż]Ę|µ'î†ůË/S?._&íŹIű’éë&Ęŝ޳iƒ  d:Ŕţů9§ÉTňD¶H|·^cşÜűT“ĚR!đž5łĺˇ§–ĘĄ˘‚zŕ>Ë×ďSˇN/óźł™¶AÍŚÄ/–ĎĎË~\łŹ°Ňý‹˛D?rîGŻŻäµ®^çÉ…˛b«:ׯąŹ_ŘőÍ»˙&đΖéöv  SiŰÍúű^yřĆäu5e§5˙vłJÝÇö€}Ë.›)łôĽż-KŐŰ‘aMOŁË/č•&EQEQă[ůʶmŕ›ę.-Őáb»ě2!ĐňFöJ§ąó'Đž'çČÔsUxŇuó*Ůă;ˇŃˇŕ¶A٫žWŹ¨€fěŮ!ŰĚÄéŰc&

Binárne súbory môžu šetriť pamäťou, pretože napr. Číslo 1500 nemusíme ukladať ako 4 textové znaky (teda 4 čísla), ale ako len jedno číslo. Na druhú stranu malá zmena, napr. Pridanie vlastnosti k položke, spôsobí, že starší súbory prestanú byť kompatibilné a súbor sa musí konvertovať, čo je pomerne nepríjemné.

Práva na zápis súboru

Nasledujúci pasáž sa týka tých, ktorí v C ++ chcú programovať aplikáciu, ktorá bude pracovať so súbormi a ktorú budú používať koncoví užívatelia na systéme Windows alebo Linux. Pre akademické účely rôznych cvičebných programov a podobne ju môžete s kľudom preskočiť. Začiatočníkom možno zamotá hlavu, nič si z toho nerobte.

Windows 7 zapisovať práva UAC - Súbory a práca s nimi v C ++

Od Windows Vista existuje v systémoch Windows tzv. UAC (U ser A ccount C ontroly). Technológia zakazuje zápis na systémovej oblasti disku (najčastejšie C:\) v prípade, že zápis nie je povolený administrátorom alebo že sa nejedná o zápis do osobných priečinkov používateľa. Toto opatrenie samozrejme naplnilo diskusné fóra o programovaní a rozbilo rad 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 používateľské kontá. Každý užívateľský účet je realizovaný zložkou (väčšinou C:\users\jmeno_uzivatele\). Táto zložka obsahuje okrem iného dokumenty pracovnú plochu a tiež tzv. Zložku s dátami aplikácií. K tejto zložke sa možno dostať pri zadaní kľúča %appdata% do cesty. Skúste si %appdata% napísať do cesty prieskumníka a zložku otvoriť. Uvidíte, že v zložke má svoje podpriečinky mnoho aplikácií, ktoré máte nainštalované. Práve tu je miesto pre nastavenie vašich aplikácií a ďalšie dáta. Vaše aplikácie 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é nastavenie pre rôznych užívateľov, bez toho aby sme to v C ++ programovali. %appdata% mieri vždy k appdata aktuálne prihláseného používateľa.

Hoci si programy v C ++ dáta často ukladajú do zložky s programom, ak ich chceme dávať do rúk bežným užívateľom, je to chyba (aj keď práve u jazyka C ++, ktorý je multiplatformový, by sa dalo predpokladať, že s touto zložkou Windows pracovať nebude) . Náš program napr. Na ploche bude fungovať korektne, avšak keď sa potom nainštaluje do zložky Program Files\ na disku C, spadne s chybou pri zápise na disk. Problém možno samozrejme obísť tým, že aplikáciu spustíme ako správca, ale to je zlé riešenie.

Obdobné postupy zavádza aj Linux. Ten pre zmenu ukladá dáta aplikácie do skrytých priečinkov v domovskom adresári užívateľa. Tým je opäť dosiahnuté to, že aplikácia môže mať rôzne nastavenia pre rôznych používateľov. Ďalej môže aplikácia ukladať dočasné súbory do adresára /tmp/ a logami do adresára /logs/.

Ako je z vyššie opísaného zrejmé, riešenie nie je úplne jednoduché. Ak budeme chcieť do aplikácie zapracovať logiku výberu správnej cesty, stane sa aplikácia platforme závislá (tj. Bude fungovať buď pre Windows alebo len pre Linux). Situácia sa rieši podmienenými preklady a externými knižnicami, pretože štandardná knižnica nemá na tento účel definované funkcie. Pre jednoduchosť tohto kurzu nebude braná problematika do úvahy a všetky súbory budú ukladané do adresára s aplikáciou.

Nabudúce, v lekcii Prúdy v C ++ , sa pozrieme na sľúbené prúdy. Povieme si, čo to je, ako nám pomôžu a ako s nimi pracovať.


 

Predchádzajúci článok
Úvod do práce so súbormi v jazyku C ++
Všetky články v sekcii
Súbory a práca s nimi v C ++
Preskočiť článok
(neodporúčame)
Prúdy v C ++
Článok pre vás napísal Patrik Valkovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity