1. díl - Úvod do práce se soubory v jazyce C

C++ Práce se soubory Úvod do práce se soubory v jazyce C

Vítejte u první dílu krátké série tutoriálů o práci se soubory v jazyce C.

Motivace

Všechna data, se kterými jsme v našich programech zatím pracovali, byla uložena v operační paměti. Kromě toho, že se tato paměť vymaže po vypnutí počítače, ztratíme také přístup k datům v ní uložených ve chvíli, kdy náš program ukončíme. Téměř každá aplikace si však potřebuje něco trvale ukládat. Mohou to být např. jednotlivé osoby v aplikaci s telefonním seznamem nebo jen jednoduché uživatelské nastavení. Pro trvanlivé uložení dat využíváme soubory.

Způsoby uložení

Všechny soubory v našem počítači jsou víceméně dvou typů a to buď textové nebo binární.

Textové soubory

Textové soubory si můžeme představit jako jednotlivé řádky textu a jsou lidsky čitelné v nějakém textovém editoru (např. v Poznámkovém bloku). Mohou být tzv. ploché nebo mohou mít vnitřní strukturu.

Ploché soubory (flat files)

Ploché textové soubory nemají žádnou výraznou vnitřní strukturu. Můžeme mezi ně zařadit např. dopis:

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

Nebo uložení osob telefonního seznamu tak, že každou osobu uložíme na samostatnou řádku a její vlastnosti oddělíme středníky. (Tomuto formátu říkáme CSV, což je zkratka z Comma Separated Values, hodnoty oddělené čárkou nebo středníkem).

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

Pokud ukládáme nějaké nastavení, můžeme zvolit zápis podobný ini souborům:

velikost_pisma=10
hlasitost=15
barva=modra
Hierarchické soubory

Hierarchické soubory jsou textové soubory, které kromě samotných dat a oddělovačů obsahují nějaké pokročilejší formátování a dokáží uložené položky seskupovat do stromové struktury. Klasickým příkladem souboru tohoto typu je např. XML, který je navíc samopopisný. Céčko jako takové s těmito soubory pracovat neumí a sami bychom takovou knihovnu psali jen velmi těžko. I když existuje několik hotových řešení, většinou se tyto formáty v Céčku nepoužívají. Ukažme si jen pro úplnost jak XML soubor vypadá:

<?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ární soubory

Data lze kromě do textové podoby uložit tzv. binárně. Jednoduše vezmeme tu část paměti RAM, kde je uložený uživatel (nebo cokoli jiného), a uložíme tyto jedničky a nuly úplně stejně na pevný disk. Takový soubor nebude lidsky vůbec čitelný a pokud ho otevřeme v textovém editoru, uvidíme jen náhodnou směs bajtů, kterou se nám editor zoufale pokusí zobrazit jako text, ale moc 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ární soubory mohou šetřit pamětí, jelikož např. číslo 1500 nemusíme ukládat jako 4 textové znaky (tedy 4 čísla), ale jako jen jedno číslo. Na druhou stranu malá změna, např. přidání vlastnosti k položce, způsobí, že starší soubory přestanou být kompatibilní a soubor se musí konvertovat, což je poměrně nepříjemné.

Práva k zápisu v systémech Windows

Následujících pasáž se týká těch, kteří v Céčku chtějí programovat aplikaci, která bude pracovat se soubory a kterou budou používat koncoví uživatelé na systému Windows. Pro akademické účely různých cvičebních programů a podobně ji můžete s klidem přeskočit. Začátečníkům možná zamotá hlavu, nic si z toho nedělejte.

Windows 7 zápisová práva UAC

Od Windows Vista existuje v systémech Windows tzv. UAC (User Account Control). Technologie zakazuje zápis na systémový oddíl disku (nejčastěji C:) v případě, že zápis není povolen administrátorem nebo že se nejedná o zápis do osobních složek uživatele. Toto opatření samozřejmě naplnilo diskuzní fóra o programování a rozbilo řadu aplikací. Důležité však je, že toto opatření je správné a pouze zabraňuje špatně napsaným aplikacím měnit co se jim zlíbí. Linuxové systémy mají podobná opatření již dlouhou dobu.

Koncepce systému Windows zahrnuje uživatelské účty. Každý uživatelský účet je realizován složkou (většinou C:\users\jmeno_u­zivatele). Tato složka obsahuje mimo jiné dokumenty, pracovní plochu a také tzv. složku s daty aplikací. K této složce se lze dostat při zadání klíče %appdata% do cesty. Zkuste si %appdata% napsat do cesty průzkumníka a složku otevřít. Uvidíte, že ve složce má své podsložky mnoho aplikací, které máte nainstalovány. Právě zde je místo pro nastavení vašich aplikací a další data. Vaše aplikace si zde samozřejmě vytvoří složku se svým jménem a do té si bude vše ukládat. Nebudeme omezováni UAC a zároveň bude naše aplikace umožňovat jiné nastavení pro různé uživatele, aniž bychom to v Céčku programovali. %appdata% míří vždy k appdata aktuálně přihlášeného uživatele.

Ačkoli si programy v Céčku data často ukládají do složky s programem, pokud je chceme dávat do rukou běžným uživatelům, je to chyba (i když zrovna u jazyka C, který je multiplatformní, by se dalo předpokládat, že s touto složkou Windows pracovat nebude). Program na ploše nebo na starých Windows funguje korektně, nicméně když se poté nainstaluje do složky program files na disku C, spadne s chybou při zápisu na disk. Windows tento zápis částečně pro určité aplikace emulovala, ale tím se nebudeme zabývat. Problém lze samozřejmě obejít tím, že aplikaci spustíme jako správce, ale to je špatné řešení.

Níže je přiložený kód, který v appdata založí složku pro program a dále vytvoří cestu k souboru v této složce. V dalších tutoriálech již v kódu tato logika nebude obsažena a budou sloužit jako co nejjednodušší ukázka práce se soubory. Pokud budete aplikaci provozovat na svém počítači, nemusíte se o nic starat. Kód je vázaný na systém Windows a uživatelé Linuxu mě za něj asi nebudou mít příliš rádi :) Používat ho nemusíte, jen jsem chtěl, abyste o problematice věděli a uměli problém případně vyřešit kdyby 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:

Získání cesty ke složce appdata v jazyce C

Když si příslušnou cestu otevřete, zjistíte, že zde nová složka opravdu existuje. Proměnnou cesta můžete následně využít pro zápis do souboru, zde je přednastaven dopis.txt.

Složka appdata ve Windows Exploreru

Zdrojový kód zjišťovače cesty k appdata je v příloze ke stažení.

Příště se podíváme na práci s textovými soubory. Naučíme se je vytvářet, zapisovat do nich, číst z nich a také do nich text připisovat.


 

Stáhnout

Staženo 59x (32.58 kB)
Aplikace je včetně zdrojových kódů v jazyce C

 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (3 hlasů) :
55555


 


Miniatura
Všechny články v sekci
Práce se soubory v jazyce C

 

 

Komentáře

Avatar
MLN
Člen
Avatar
MLN:
mkdir(cesta, 0777);

---- prečo tam je práve 0777 ?

 
Odpovědět 6.12.2014 0:59
Avatar
Odpovědět  +1 9.12.2014 17:46
Inteligentní nemá čas si pamatovat, inteligentní musí vymýšlet.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.