Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilMilena Vacková
1
A1PRG - Programování – Seminář Ing. Michal Heczkoheczko@fai.utb.cz Standardní knihovní funkce pro práci se soubory 13 Verze 2009.01
2
Agenda Standardní knihovní funkce pro práci se soubory
3
Typy souborů Textové soubory Binární soubory
4
Textové soubory Lze je otevřít běžným textovým editorem Organizovány po řádcích Každý řádek ukončen znakem \n
5
Binární soubory Při otevření běžným textovým editorem nedávají smysluplnou informaci V souboru uloženy binárně přímo číselné hodnoty Výhody: pokud je nutné uložit číslo (např. u čísla 65000 je v textovém souboru uloženo 5 bytů, ale v binárním 2 – při použití datového typu short int) Odpadá nutnost konverze mezi použitým datovým typem a textem
6
FILE Struktura FILE – speciální datový typ pro práci se soubory. Struktura definována v souboru stdio.h Obsahuje informace o otevřeném souboru, ukazatel na aktuální pozici v souboru, režim otevření souboru (čtení, zápis, …)
7
Otevření souboru Funkce fopen() Hlavičkový soubor: stdio.h Syntaxe: FILE * fopen ( const char * filename, const char * mode ); Parametry: filename…jméno souboru mode… režim otevření souboru Návratová hodnota: FILE…ukazatel na soubor
8
Otevření souboru Režim otevření souboru Textový s.Binární s.Popis rrb Otevření souboru pro čtení. Soubor musí existovat! wwb Otevření souboru pro zápis. Pokud soubor existuje, je jeho obsah přemazán. aab Otevření souboru pro zápis. Pokud soubor existuje, jsou data přidána na konec souboru.
9
Otevření souboru Režim otevření souboru Textový s.Binární s.Popis r+r+b Otevření souboru pro čtení a zápis. Soubor musí existovat! w+w+b Vytvoření a otevření souboru pro čtení a zápis. Pokud soubor existuje, je jeho obsah přemazán. a+a+b Otevření souboru pro čtení a přidávání dat. Pokud soubor neexistuje, je vytvořen. Přidávat data lze pouze na konec souboru.
10
Uzavření souboru Funkce fclose() Hlavičkový soubor: stdio.h Syntaxe: int fclose ( FILE * stream ); Parametry: stream…ukazatel na soubor Návratová hodnota: 0 při správném uzavření souboru, jinak EOF
11
Příklad otevření a uzavření souboru FILE *f; f = fopen(″soubor.txt″,″r″); if(f == NULL) { printf(″Soubor nebyl nalezen″); } else { // … čtení ze souboru … fclose(f); }
12
Formátované čtení dat Funkce fscanf() Hlavičkový soubor: stdio.h Syntaxe: int fscanf ( FILE * stream, const char * format,... ); Parametry: stream…ukazatel na soubor Další parametry stejné jako u scanf() Návratová hodnota: Počet načtených položek nebo EOF při chybě čtení
13
Formátovaný zápis dat Funkce fprintf() Hlavičkový soubor: stdio.h Syntaxe: int fprintf ( FILE * stream, const char * format,... ); Parametry: stream…ukazatel na soubor Další parametry stejné jako u printf() Návratová hodnota: Počet zapsaných znaků nebo záporné číslo při chybě zápisu
14
Příklad zápisu do souboru FILE *f; f = fopen(″soubor.txt″,″w″); if(f == NULL) { printf(″Soubor nelze vytvořit″); } else { fprintf(f,″%d %f %s\n″, 5, 2.8, ″text″); fclose(f); }
15
Příklad čtení ze souboru FILE *f; f = fopen(″soubor.txt″,″r″); int x = 1; int n; while (x != EOF) { x = fscanf(″%d\t″, &n); printf(″%d\n″,n); } fclose(f);
16
Neformátované čtení dat Neformátovaný zápis dat Funkce: fgetc()… čtení jednoho znaku ze souboru fputc() … zápis jednoho znaku do souboru Makra: getc()… čtení jednoho znaku ze souboru putc() … zápis jednoho znaku do souboru Makra by měla zajistit mírně rychlejší načítání dat.
17
Neformátované čtení dat Funkce fgetc() Hlavičkový soubor: stdio.h Syntaxe: int fgetc ( FILE * stream ); Parametry: stream…ukazatel na soubor Návratová hodnota: Načtený znak ve formátu datového typu int
18
Neformátované čtení dat Makro getc() Hlavičkový soubor: stdio.h Syntaxe: int getc ( FILE * stream ); Parametry: stream…ukazatel na soubor Návratová hodnota: Načtený znak ve formátu datového typu int
19
Neformátovaný zápis dat Funkce fputc() Hlavičkový soubor: stdio.h Syntaxe: int fputc (int character, FILE * stream ); Parametry: character…znak, který má být zapsán stream…ukazatel na soubor Návratová hodnota: Stejný znak, který byl zapsán. V případě chyby EOF.
20
Neformátovaný zápis dat Makro putc() Hlavičkový soubor: stdio.h Syntaxe: int putc (int character, FILE * stream ); Parametry: character…znak, který má být zapsán stream…ukazatel na soubor Návratová hodnota: Stejný znak, který byl zapsán. V případě chyby EOF.
21
Příklad čtení ze souboru a zápisu do souboru FILE *f, *g; int c; f = fopen(″x.txt″,″r″); g = fopen(″y.txt″,″w″); while ((c = getc(f)) != EOF) { putc(c, g); } fclose(f); fclose(g);
22
Změna pozice v souboru Funkce ftell() Zjištění aktuální pozice v souboru fseek() Přesun na určitou pozici v souboru rewind() Přesun na začátek souboru
23
Zjištění aktuální pozice v souboru Funkce ftell() Hlavičkový soubor: stdio.h Syntaxe: long int ftell ( FILE * stream ); Parametry: stream…ukazatel na soubor Návratová hodnota: Pozice V případě chyby -1.
24
Nastavení pozice v souboru Funkce fseek() Hlavičkový soubor: stdio.h Syntaxe: int fseek ( FILE * stream, long int offset, int origin ); Parametry: stream…ukazatel na soubor offset …počet znaků od daného počátku origin… definice počátku pro parametr offset. Návratová hodnota:0, pokud vše proběhne v pořádku
25
Nastavení pozice v souboru Funkce fseek() Hlavičkový soubor: stdio.h Syntaxe: int fseek ( FILE * stream, long int offset, int origin ); Parametr origin: SEEK_SET…začátek souboru SEEK_CUR…aktuální pozice v souboru SEEK_END… konec souboru
26
Příklad FILE *f; long size; f = fopen („s.txt","rb"); if (f == NULL) printf ("SOUBOR NELZE OTEVŘÍT"); else { fseek (f, 0, SEEK_END); size=ftell (f); fclose (f); printf ("Velikost souboru s.txt: %ld B.\n",size); }
27
Přesun na začátek souboru Funkce rewind() Hlavičkový soubor: stdio.h Syntaxe: void rewind ( FILE * stream); Parametry: stream…ukazatel na soubor Alternativa: fseek ( stream, 0L, SEEK_SET );
28
Zpracování bloku dat Funkce: fread() fwrite()
29
Načtení bloku dat Funkce fread() Hlavičkový soubor: stdio.h Syntaxe: size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); Parametry: ptr…adresa paměti pro uložení bloku dat size…rozměr jedné položky v bytech count…počet položek stream…ukazatel na soubor
30
Načtení bloku dat Funkce fread() Hlavičkový soubor: stdio.h Syntaxe: size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); Návratová hodnota: Počet úspěšně načtených položek
31
Načtení bloku dat Funkce fwrite() Hlavičkový soubor: stdio.h Syntaxe: size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); Parametry: ptr…adresa paměti pro načtení bloku dat size…rozměr jedné položky v bytech count…počet položek stream…ukazatel na soubor
32
Načtení bloku dat Funkce fwrite() Hlavičkový soubor: stdio.h Syntaxe: size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); Návratová hodnota: Počet úspěšně zapsaných položek
33
Bloky dat - příklad FILE * f; int pole[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; f = fopen ( „data.bin", "wb" ); fwrite (pole, sizeof(int), 8, f); fclose (f);
34
A1PRG-s 13. Soubory Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.czhttp://vyuka.fai.utb.cz
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.