34
A1PRG - Programování – Seminář Ing. Michal Heczko [email protected] Standardní knihovní funkce pro práci se soubory 13 Verze 2009.01

Standardní knihovní funkce pro práci se soubory

  • Upload
    craig

  • View
    43

  • Download
    1

Embed Size (px)

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 Presentation

Citation preview

Page 1: Standardní knihovní funkce pro práci se soubory

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

Agenda

Standardní knihovní funkce pro práci se soubory

Page 3: Standardní knihovní funkce pro práci se soubory

Typy souborů

Textové soubory Binární soubory

Page 4: Standardní knihovní funkce pro práci se soubory

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Zpracování bloku dat

Funkce: fread() fwrite()

Page 29: Standardní knihovní funkce pro práci se soubory

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

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

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

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

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

A1PRG-s 13. Soubory

Děkuji za pozornost

Ing. Michal Heczko

[email protected]

218/U3

Prezentace k dispozici na http://vyuka.fai.utb.cz