Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
|
strprg:c:soubory [08. 03. 2014, 10.34] rasa |
strprg:c:soubory [12. 03. 2014, 15.32] (aktuální) |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== Čtení a zápis souborů ====== | ====== Čtení a zápis souborů ====== | ||
| Všechny funkce, které budeme pro tyto operace potřebovat najdeme ve standardní knihovně <stdio.h>. C podporuje tzv. bitový a textový režim. | Všechny funkce, které budeme pro tyto operace potřebovat najdeme ve standardní knihovně <stdio.h>. C podporuje tzv. bitový a textový režim. | ||
| + | |||
| + | == Rozdíl režimů == | ||
| + | Pro počítač žádný, protože i textový soubor je pro něj změť bajtů, ale ke kterým má instrukce, jak je převádět. Pro vás je důležité vědět, že se u bitového a textového režimu používají jiné funkce pro práci s daty souboru. | ||
| + | |||
| + | ==== Jak na to? ==== | ||
| + | <code c> | ||
| + | FILE * ukazatel; //vytvoříme ukazatel | ||
| + | |||
| + | ukazatel = fopen("file.txt", "r"); //otevřeme soubor file.txt, v režimu čtení | ||
| + | if(ukazatel == NULL){ //zkontrolujeme jestli se soubor načetl správně | ||
| + | return 1; | ||
| + | } | ||
| + | /* | ||
| + | nyní pracujeme s obsahem souboru | ||
| + | */ | ||
| + | fclose(ukazatel); //nezapomínáme soubor na konci uzavřít | ||
| + | </code> | ||
| + | |||
| + | ==== Režimy ===== | ||
| + | Základní textové jsou: | ||
| + | * "r" = pouze čtení | ||
| + | * "w" = pouze přepisování | ||
| + | * "a" = připisování na konce souboru | ||
| + | A co, když chci číst i zapisovat? Stačí pouze za písmeno přidat '+' (např. "r+"). | ||
| + | Pro jejich bitovou variantu přidáme 'b', stejně jako v předchozím případě. | ||
| + | |||
| + | ==== Čtení obsahu ==== | ||
| + | == Textový režim == | ||
| + | Pro čtení můžeme použít univerzální funkci fscanf, nebo pokud nám stačí načítat po charu tak máme k dispozici funkci fgetc. | ||
| + | Systaxe fscanf: | ||
| + | <code c> | ||
| + | fscanf(ukazatel, typ, do čeho); | ||
| + | </code> | ||
| + | Syntaxe fgetc: | ||
| + | <code c> | ||
| + | proměnná/ukazatel = fgetc(ukazatel); | ||
| + | </code> | ||
| + | == Bitový režim == | ||
| + | Zde máme jedinou funkci a to fread. Její syntaxe: | ||
| + | <code c> | ||
| + | pocet_nactenych_polozek = fread(ukazatel_do_pameti, velikost_typu, pocet_nacitanych_jednotek, ukazatel_na_soubor); | ||
| + | </code> | ||
| + | |||
| + | ==== Zápis ==== | ||
| + | == Textový režim == | ||
| + | Opět máme 2 možnosti. Univerzální fprintf a fputs, který vkládád stringy. | ||
| + | Syntaxe fprintf: | ||
| + | <code c> | ||
| + | int x = 10; | ||
| + | fprintf(ukazatel na soubor, 'Text "%i"\n', x); //prakticky stejné, jako klasické printf, pouze je třeba na začátku přidat ukazatel | ||
| + | </code> | ||
| + | fputs: | ||
| + | <code c> | ||
| + | fputs(proměnná se stringem, soubor); | ||
| + | </code> | ||
| + | == Bitový režim == | ||
| + | Opět pouze 1 varianta, tentokrát fwrite. | ||
| + | <code c> | ||
| + | fwrite (co, velikost typu, kolikrát, kam); | ||
| + | </code> | ||
| + | ---- | ||
| + | Pokud potřebujete celkovou syntaxi všech funkcí, doporučuji [[http://www.cplusplus.com/reference/cstdio/|dokumentaci knihovny <stdio.h>]] a článek [[http://www.linuxsoft.cz/article.php?id_article=899|Soubory]] na linuxsoft.cz. | ||