1 / 34

Standardní knihovní funkce pro práci se soubory

Verze 2009.01. Standardní knihovní funkce pro práci se soubory. 13. A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz. Agenda. Standardní knihovní funkce pro práci se soubory. Typy souborů. Textové soubory Binární soubory. Textové soubory.

craig
Download Presentation

Standardní knihovní funkce pro práci se soubory

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Verze 2009.01 Standardní knihovní funkce pro práci se soubory 13 A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz

  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

  9. Otevření souboru • Režim otevření 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í 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.

  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.cz

More Related