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.
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ť.