10. gyakorlat
Téma: Erőforrások kezelése (part 2)
- Fájlkezelés
Fájlkezelés
Szükséges: standard input and output
- 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
Általános szintax:
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
Általános szintax:
- 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;
}