standardní knihovní funkce pro práci se soubory
DESCRIPTION
Verze 2009.01. Standardní knihovní funkce pro práci se soubory. 13. A1PRG - Programování – Seminář Ing. Michal [email protected]. Agenda. Standardní knihovní funkce pro práci se soubory. Typy souborů. Textové soubory Binární soubory. Textové soubory. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/1.jpg)
A1PRG - Programování – Seminář
Ing. Michal Heczko [email protected]
Standardní knihovní funkce pro práci se soubory 13
Verze 2009.01
![Page 2: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/2.jpg)
Agenda
Standardní knihovní funkce pro práci se soubory
![Page 3: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/3.jpg)
Typy souborů
Textové soubory Binární soubory
![Page 4: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/4.jpg)
Textové soubory
Lze je otevřít běžným textovým editorem Organizovány po řádcích Každý řádek ukončen znakem \n
![Page 5: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/5.jpg)
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
![Page 6: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/6.jpg)
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, …)
![Page 7: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/7.jpg)
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
![Page 8: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/8.jpg)
Otevření souboru
Režim otevření souboruTextový s.
Binární s.
Popis
r rb Otevření souboru pro čtení. Soubor musí existovat!
w wb Otevření souboru pro zápis. Pokud soubor existuje, je jeho obsah přemazán.
a ab Otevření souboru pro zápis. Pokud soubor existuje, jsou data přidána na konec souboru.
![Page 9: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/9.jpg)
Otevření souboru
Režim otevření souboruTextový 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.
![Page 10: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/10.jpg)
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
![Page 11: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/11.jpg)
Příklad otevření a uzavření souboruFILE *f;
f = fopen(″soubor.txt″,″r″);
if(f == NULL)
{
printf(″Soubor nebyl nalezen″);
}
else
{
// … čtení ze souboru …
fclose(f);
}
![Page 12: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/12.jpg)
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í
![Page 13: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/13.jpg)
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
![Page 14: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/14.jpg)
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);
}
![Page 15: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/15.jpg)
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);
![Page 16: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/16.jpg)
Neformátované čtení datNeformá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.
![Page 17: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/17.jpg)
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
![Page 18: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/18.jpg)
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
![Page 19: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/19.jpg)
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.
![Page 20: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/20.jpg)
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.
![Page 21: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/21.jpg)
Příklad čtení ze souboru a zápisu do souboruFILE *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);
![Page 22: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/22.jpg)
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
![Page 23: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/23.jpg)
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.
![Page 24: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/24.jpg)
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
![Page 25: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/25.jpg)
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
![Page 26: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/26.jpg)
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);
}
![Page 27: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/27.jpg)
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 );
![Page 28: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/28.jpg)
Zpracování bloku dat
Funkce: fread() fwrite()
![Page 29: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/29.jpg)
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
![Page 30: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/30.jpg)
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
![Page 31: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/31.jpg)
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
![Page 32: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/32.jpg)
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
![Page 33: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/33.jpg)
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);
![Page 34: Standardní knihovní funkce pro práci se soubory](https://reader031.vdocuments.pub/reader031/viewer/2022020801/56813fe9550346895daadd21/html5/thumbnails/34.jpg)
A1PRG-s 13. Soubory
Děkuji za pozornost
Ing. Michal Heczko
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz