Kihagyás

10. gyakorlat

Téma: Erőforrások kezelése (part 2)

  • Fájlkezelés

Fájlkezelés

Szükséges: standard input and output

#include <stdio.h>
  • Fájlkezelésnél nem közvetlenül dolgozunk a tárolt adattal
  • A standard könyvtári függvényekkel tudjuk írni és olvasni a fájlokat

Fájl megnyitása

I.) Hozzáférés kérése

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

Általános szintax:

FILE *fajlpointer = fopen("fajlneve", "mode");
  • FILE* típusú pointeren keresztül olvassuk és írjuk a fájlt
  • A fájl megnyitása: fopen() függvény
    • Fájl neve (karakterlánc)
    • Mode argumentum
  • Sikeres megnyitás: visszatér a file-ra mutató pointerrel
  • Sikertelen a megnyitás: null pointer
  • A függvény nem ellenőrzi a fájl létezését => nekünk kell ezt ellenőrizni
    • Ha nem találja: null pointer

Mode argumentumok:

Argumentum Mit csinál? Ha Létezik a fájl Ha nem létezik a fájl
"r" Megnyitja és olvassa a fájlt Az elejétől olvassa NULL pointer
"w" Létrehoz egy fájlt és írja Felülírja a tartalmat Létrehozza
"a" Hozzáfűz egy fájlhoz A végére ír Létrehozza
"r+" Megnyitja a fájlt írásra/olvasásra Az elejétől olvassa NULL pointer
"w+" Létrehoz egy fájlt írásra/olvasásra Felülírja a tartalmat Létrehozza
"a+" Megnyitja a fájlt írásra/olvasásra A végére ír Létrehozza
"b" Bináris formában nyitja meg a fájlt

II.) Ellenőrzés

Ugyanúgy azt ellenőrizzük, hogy nem null pointer-e (ld. 9. gyakorlat)

if(fp != NULL)
{
    printf("Sikeres fájl megnyitás\n");
}
else
{
    printf("Sikertelen fájl megnyitás\n");
}

Fájl műveletek

A standard könyvtár függvényeit használjuk a fájlok írására és olvasására

Olvas vagy ír Függvény Mit csinál?
R fgets(hova_olvassa, mennyi, honnan) Olvas egy sort
3. argumentum: fájl pointer
W fputs("szoveg", hova) Ír egy sort
2. argumentum: fájl pointer
--- --- ---
R fgetc(honnan) Karakterenként olvassa a fájlt
Argumentum: fájl pointer
W fputc('karakter', hova) Karakterenként írja a fájlt
2. argumentum: fájl pointer
R fscanf(honnan) Ugyanaz, mint a scanf()
1. argumentum: fájl pointer
W fprintf(hova, "szoveg") Ugyanaz, mint a printf()
1. argumentum: fájl pointer
R getline(hova, meret, honnan) Soronként olvas (ld. példa!)
1. argumentum: pointer, ami arra mutat, ahol eltároljuk
2. argumentum: méret memóriacíme
3. argumentum: fájl pointer

Fájl bezárása

III.) Felszabadítás

int fclose( FILE * fp )

Általános szintax:

fclose(fajlpointer);
  • Fájl bezárása: fclose() függvény
  • Sikeres: 0-val tér vissza (ritkán ellenőrízzük)

Példák

Fájlba írás

#include <stdio.h>

int main()
{
    FILE *fp = fopen("hello.txt", "w");

    fputs("Hello there!", fp);

    fclose(fp);

    return 0;
}

Beolvasás

#include <stdio.h>

int main()
{
    FILE *fp = fopen("hello.txt", "r");

    char szoveg[50];

    fgets(szoveg, 50, fp);

    fclose(fp);

    return 0;
}

getline()

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp = fopen("hello.txt", "r+");

    char *szoveg = NULL;
    size_t meret;

    getline(&szoveg, &meret, fp);

    free(szoveg);

    fclose(fp);

    return 0;
}