Práce s textovými soubory

Doplňující informace

Veškeré funkce, konstanty a struktury používané při práci se soubory jsou definovány ve standardní knihovně stdio.h.

Otevření souboru

Pro práci se soubory jsou používány ukazatale na strukturu FILE, čili jakési "ukazatele na soubor" (obecněji ukazatele na datový proud, anglicky stream). Než začneme se souborem pracovat (číst či zapisovat data) je nutné soubor otevřít pomocí funkce fopen.

Deklarace funkce:

FILE *fopen(char* filename, char* mode);

kde filename je textový řetězec obsahující jméno souboru (pokud se soubor nachází v jiném adresáři, je nutné specifikovat také cestu k tomuto souboru, relativní nebo absolutní) a textový řetězec mode pak specifikuje způsob otevření souboru. Řetězec mode může nabývat následujících hodnot: "r", "w", "a", "r+", "w+", "a+", "rt", "wt", "at", "r+t", "w+t", "a+t", "rb", "wb", "ab", "r+b", "w+b" a "a+b", kde znak "r" odpovídá otevření pro čtení, "w" otevření pro zápis, "a" otevření pro zápis na konec již existujícího souboru, "b" otevření binárního souboru, "t" otevření textového souboru a znak "+" specifikuje režimy, které umožňují jak čtení, tak zápis. Pokud není uveden žádný ze znaků "t" nebo "b" otevírá se daný soubor jako textový. Funkce vrací ukazatel na strukturu FILE odpovídající právě otevřenému souboru nebo hodnotu NULL, pokud při otevírání souboru došlo k chybě.

Čtení z textového proudu

int getc(FILE *soubor);

Funkce přečte z proudu soubor jeden znak, který vrátí jako svou návratovou hodnotu. Pokud došlo při čtení k chybě, vrací funkce hodnotu EOF.

char *fgets(char* text, int max, FILE *soubor);

Funkce přečte z proudu soubor text tvořící nejvýše jeden řádek a obsahující nejvýše max-1 znaků. Tento textový řetězec nakopíruje do textového řetězce text a vrátí ukazatel na začátek tohoto textového řetězce. Pokud došlo při čtení k chybě, vrací funkce hodnotu NULL.

int fscanf(FILE *soubor, const char* format, ...);

Funkce pro formátované čtení z daného proudu soubor. Jde o obdobu funkce scanf, pouze se data čtou z daného proudu. Pro kontrolu vrací funkce fscanf počet úspěšně přečtených položek.

Zápis do textového proudu

int putc(int zn, FILE *soubor);

Funkce zapíše do proudu soubor znak zn. Pokud při zápisu dojde k chybě, vrací funkce hodnotu EOF.

int fputs(const char *text, FILE *soubor);

Funkce zapíše do proudu soubor textový řetězec text. Pokud při zápisu dojde k chybě, vrací funkce hodnotu EOF.

int fprintf(FILE *soubor, const char *format, ...);

Funkce pro formátovaný zápis do proudu soubor. Jde o obdobu funkce printf, pouze se data zapisují do daného proudu. Pro kontrolu vrací funkce fprintf počet úspěšně zapsaných položek.

Uzavření proudu

Pokud již z daného proudu (souboru) nebudeme číst ani do něj zapisovat, je vhodné tento proud uzavřít.

int fflush(FILE *soubor);

Funkce pro vyprázdnění bufferu daného proudu soubor. V případě neúspěchu vrací konstantu EOF.

int fclose(FILE *soubor);

Funkce pro vyprázdnění bufferu a zavření proudu soubor. V případě neúspěchu vrací konstantu EOF.

Vrácení znaku do bufferu

V reálných aplikacích se často dovídáme o tom, že máme přestat číst až ve chvíli, kdy jsme přečetli první znak dalšího bloku dat (čili jeden znak navíc). Z tohoto důvodu je v jazyku C k dispozici funkce pro vrácení jednoho přečteného znaku zpět do bufferu.

Deklarace funkce:

int ungetc(int zn, FILE *soubor);

Funkce vrátí daný znak zn do bufferu proudu soubor. Při úspěšném provedení vrací funkce jako svou návratovou hodnotu do bufferu navrácený znak, v případě neúspěchu pak hodnotu EOF.


Creative Commons License Sbírka úloh z jazyka C. © Katedra informatiky Univerzity Palackého v Olomouci, 2009.
Projekt byl vytvořen za podpory grantu FRVŠ 2061/2009/G1.