1. diel - Úvod do práce so súbormi v jazyku C
Vitajte u prvej lekcie kratšieho kurzu tutoriálov o prácu so súbormi v jazyku C.
Motivácia
Všetky dáta, s ktorými sme v našich programoch zatiaľ pracovali, bola uložená v operačnej pamäti. Okrem toho, že sa táto pamäť vymaže po vypnutí počítača, stratíme tiež prístup k dátam v nej uložených vo chvíli, keď náš program ukončíme. Takmer každá aplikácia si však potrebuje niečo trvalo ukladať. Môžu to byť napr. Jednotlivé osoby v aplikácii s telefónnym zoznamom alebo len jednoduché užívateľské nastavenie. Pre trvanlivé uloženie dát využívame súbory.
Spôsoby uloženia
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 Comma Separated Values, 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 stromovej štruktúry. Klasickým príkladom tohto typu súboru je napr. XML, ktorý je navyše samopopisný. Céčko ako také s týmito súbormi pracovať nevedia a sami by sme takú knižnicu písali len veľmi ťažko. Aj keď existuje niekoľko hotových riešení, väčšinou sa tieto formáty v céčka nepoužívajú. 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 v systémoch Windows
Nasledujúcich pasáž sa týka tých, ktorí v céčko chcú programovať aplikáciu, ktorá bude pracovať so súbormi a ktorú budú používať koncoví užívatelia na systéme Windows. 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 (User Account Control). 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 \ ID užívateľa). 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éčka programovali. % Appdata% mieri vždy k appdata aktuálne prihláseného používateľa.
Hoci si programy v céčko 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) . Program na ploche alebo na starých Windows funguje korektne, avšak keď sa potom nainštaluje do zložky program files na disku C, spadne s chybou pri zápise na disk. Windows tento zápis čiastočne pre určité aplikácie emuloval, ale tým sa nebudeme zaoberať. Problém možno samozrejme obísť tým, že aplikáciu spustíme ako správca, ale to je zlé riešenie.
Nižšie je priložený kód, ktorý v appdata založí zložku pre program a ďalej vytvorí cestu k súboru v tejto zložke. V ďalších tutoriáloch už v kóde táto logika nebude obsiahnutá a budú slúžiť ako čo najjednoduchšie ukážka práce so súbormi. Ak budete aplikáciu prevádzkovať na svojom počítači, nemusíte sa o nič starať. Kód je viazaný na systém Windows a používatelia Linuxu ma za neho asi nebudú mať príliš radi Používať ho nemusíte, len som chcel, aby ste o problematike vedeli a vedeli problém prípadne vyriešiť keby nastal.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> int main(int argc, char** argv) { char cesta[1024]; strcpy(cesta, getenv("APPDATA")); // Zjištění cesty ke složce strcat(cesta, "/itnetwork"); mkdir(cesta, 0777); // Vytvoření složky strcat(cesta, "/dopis.txt"); // Připojení názvu souboru k cestě printf(cesta); return (EXIT_SUCCESS); }
Výstup programu:
c_soubory_appdata
C:\Users\David\AppData\Roaming/itnetwork/dopis.txt
Keď si príslušnú cestu otvoríte, zistíte, že tu nová zložka naozaj existuje. Premennú cesta môžete následne využiť pre zápis do súboru, tu je prednastavený dopis.txt.
Zdrojový kód zisťovacie cesty k appdata je v prílohe k stiahnutiu.
Nabudúce, v lekcii Práca s textovými súbormi (txt) v jazyku C , sa pozrieme na prácu s textovými súbormi. Naučíme sa je vytvárať, zapisovať do nich, čítať z nich a tiež do nich text pripisovať.
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é 91x (32.58 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C