C Fájlkezelés
A fájl nagy mennyiségű tartós adat tárolására használható. Sok más nyelvhez hasonlóan a C is a következő fájlkezelő funkciókat biztosítja,
- Fájl létrehozása
- Fájl megnyitása
- Fájl olvasása
- Írás fájlba
- Fájl bezárása
Az alábbiakban bemutatjuk a „C” -ban elérhető legfontosabb fájlkezelő funkciókat
funkció | célja |
fopen () | Fájl létrehozása vagy meglévő fájl megnyitása |
fclose () | Fájl bezárása |
fprintf () | Adatblokk írása fájlba |
fscanf () | Blokkadatok olvasása fájlból |
getc () | Egyetlen karaktert olvas fel egy fájlból |
putc () | Egyetlen karaktert ír egy fájlba |
getw () | Fájlból egész számot olvas |
putw () | Egész szám írása egy fájlba |
fseek () | A fájlmutató pozícióját egy meghatározott helyre állítja be |
ftell () | Visszaadja a fájlmutató aktuális helyzetét |
visszatekerés () | Beállítja a fájlmutatót a fájl elejére |
Ebben az oktatóanyagban megtanulja-
- Fájl létrehozása
- Fájl bezárása:
- Írás fájlba
- fputc () Funkció:
- bemenetek () Funkció:
- fprintf () Funkció:
- Adatok olvasása egy fájlból
- Interaktív fájl olvasás és írás a getc és a putc segítségével
Fájl létrehozása
Amikor egy fájllal szeretne dolgozni, az első lépés egy fájl létrehozása. A fájl nem más, mint egy hely a memóriában, ahol adatokat tárolnak.
Fájl létrehozásához a „C” programban a szintaxist követve,
FILE *fp;fp = fopen ("file_name", "mode");
A fenti szintaxisban a fájl egy adatstruktúra, amelyet a standard könyvtár határoz meg.
A fopen egy szabványos függvény, amelyet egy fájl megnyitására használnak.
- Ha a fájl nincs a rendszeren, akkor létrejön, majd megnyílik.
- Ha egy fájl már megtalálható a rendszeren, akkor közvetlenül ennek a funkciónak a segítségével nyílik meg.
Az fp egy fájlmutató, amely a típusú fájlra mutat.
Amikor megnyit egy fájlt, vagy létrehoz egy fájlt, meg kell határoznia, hogy mit fog kezdeni a fájllal. A „C” programozású fájl létrehozható vagy megnyitható olvasási / írási célokra. A mód segítségével meghatározható, hogy az alábbiakban megadott célokból meg akarja-e nyitni a fájlt. Az alábbiakban bemutatjuk a „C” programozás különféle módjait, amelyek egy fájl használatakor használhatók.
Fájl mód | Leírás |
r | Nyisson meg egy fájlt olvasásra. Ha egy fájl olvasási módban van, akkor az adatok nem kerülnek törlésre, ha egy fájl már van a rendszeren. |
w | Nyisson meg egy fájlt írásra. Ha egy fájl írásmódban van, akkor új fájl jön létre, ha egy fájl egyáltalán nem létezik. Ha egy fájl már megtalálható a rendszeren, akkor a fájlon belüli összes adat megcsonkul, és írás céljából megnyílik. |
a | Nyissa meg a fájlt függelék módban. Ha egy fájl függelék módban van, akkor a fájl megnyílik. A fájl tartalma nem változik. |
r + | nyitva áll olvasásra és írásra a kezdetektől fogva |
w + | nyitott olvasásra és írásra, egy fájl felülírására |
a + | nyitva olvasásra és írásra, fájlhoz csatolva |
Az adott szintaxisban a fájlnév és az üzemmód karakterláncként van megadva, ezért mindig dupla idézőjelek közé kell tenni őket.
Példa:
#includeint main() {FILE *fp;fp = fopen ("data.txt", "w");}
Kimenet:
A fájl ugyanabban a mappában jön létre, ahová elmentette a kódot.
Megadhatja a fájl létrehozásának elérési útját
#includeint main() {FILE *fp;fp = fopen ("D://data.txt", "w");}
Fájl bezárása
Mindig be kell zárni egy fájlt, ha a fájlon végzett műveletek véget érnek. Ez azt jelenti, hogy a fájl tartalma és linkjei megszűnnek. Ez megakadályozza a fájl véletlen károsodását.
A „C” az fclose funkciót biztosítja a fájl bezárási művelet végrehajtásához. Az fclose szintaxisa a következő,
fclose (file_pointer);
Példa:
FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);
Az fclose függvény argumentumként egy fájlmutatót vesz fel. A fájlmutatóhoz társított fájlt ezután az fclose függvény segítségével bezárják. 0-t ad vissza, ha a bezárás sikeres volt, és EOF-t (a fájl vége), ha hiba történt a fájl bezárása közben.
A fájl bezárása után ugyanaz a fájlmutató más fájlokkal is használható.
A „C” programozásnál a fájlok automatikusan bezáródnak, amikor a program befejeződik. A fájl manuális bezárása az fclose függvény megírásával jó programozási gyakorlat.
Írás fájlba
A C fájlban, amikor fájlba ír, kifejezetten hozzá kell adni a (z) '\ n' újsoros karaktereket.
Az stdio könyvtár a fájlba történő íráshoz szükséges funkciókat kínálja:
- fputc (char, file_pointer) : Karaktert ír a fájlba, amelyre a file_pointer mutat.
- fputs (str, file_pointer) : Karaktersorozatot ír a file_pointer által mutatott fájlba.
- fprintf (file_pointer, str, variable_lists) : Karaktersorozatot nyomtat a file_pointer által mutatott fájlhoz. A karakterlánc opcionálisan tartalmazhat formátummeghatározókat és a változó_listák változók listáját.
Az alábbi program bemutatja, hogyan kell fájlba írni:
fputc () Funkció:
#includeint main() {int i;FILE * fptr;char fn[50];char str[] = "Guru99 Rocks\n";fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"for (i = 0; str[i] != '\n'; i++) {/* write to file using fputc() function */fputc(str[i], fptr);}fclose(fptr);return 0;}
Kimenet:
A fenti program egyetlen karaktert ír be az fputc_test.txt fájlba, amíg el nem éri a következő "\ n" sor szimbólumot, ami azt jelzi, hogy a mondatot sikeresen megírták. A folyamat az, hogy vegyük a tömb minden karakterét és beírjuk a fájlba.
- A fenti programban létrehoztunk és megnyitottunk egy fputc_test.txt nevű fájlt írási módban, és deklaráltuk a fájlba beírandó karakterláncunkat.
- Karakterenként írási műveletet hajtunk végre a ciklus segítségével, és minden karaktert a fájlunkba tesszük, amíg a "\ n" karakter meg nem jelenik, majd a fájlt bezárjuk az fclose függvény segítségével.
bemenetek () Funkció:
#includeint main() {FILE * fp;fp = fopen("fputs_test.txt", "w+");fputs("This is Guru99 Tutorial on fputs,", fp);fputs("We don't need to use for loop\n", fp);fputs("Easier than fputc function\n", fp);fclose(fp);return (0);}
KIMENET:
- A fenti programban létrehoztuk és megnyitottuk az fputs_test.txt nevű fájlt írási módban.
- Miután három különböző karakterláncot írva írási műveletet hajtottunk végre az fputs () függvény segítségével
- Ezután a fájl bezáródik az fclose függvény segítségével.
fprintf () Funkció:
#includeint main() {FILE *fptr;fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"/* write to file */fprintf(fptr, "Learning C with Guru99\n");fclose(fptr);return 0;}
KIMENET:
- A fenti programban létrehoztuk és megnyitottuk az fprintf_test.txt nevű fájlt írási módban.
- Miután egy írás műveletet végrehajtott az fprintf () függvény segítségével egy karakterlánc megírásával, akkor a fájlt az fclose függvény segítségével lezárjuk.
Adatok olvasása egy fájlból
Három különböző funkció van az adatok fájlból történő olvasására
- fgetc (file_pointer): A következő karaktert adja vissza a fájlból, amelyre a fájl mutatója mutat. Amikor elérte a fájl végét, az EOF-t visszaküldi.
- fgets (puffer, n, file_pointer): n-1 karaktert olvas ki a fájlból, és a karaktersorozatot egy pufferben tárolja, amelyben a NULL '\ 0' karaktert utolsó karakterként csatolják.
- fscanf (file_pointer, conversion_specifiers, variable_adresses) : Az adatok elemzésére és elemzésére szolgál. Karaktereket olvas ki a fájlból, és a bemenetet a változó címek változó mutatók listájához rendeli át konverziós specifikátorok segítségével. Ne feledje, hogy mint a scanf esetében, az fscanf is abbahagyja a karakterlánc olvasását, ha szóköz vagy újsor kerül.
A következő program bemutatja az fputs_test.txt fájlból való olvasást a fgets (), az fscanf () és az fgetc () függvényekkel:
#includeint main() {FILE * file_pointer;char buffer[30], c;file_pointer = fopen("fprintf_test.txt", "r");printf("----read a line----\n");fgets(buffer, 50, file_pointer);printf("%s\n", buffer);printf("----read and parse data----\n");file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointerchar str1[10], str2[2], str3[20], str4[2];fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);printf("Read String1 |%s|\n", str1);printf("Read String2 |%s|\n", str2);printf("Read String3 |%s|\n", str3);printf("Read String4 |%s|\n", str4);printf("----read the entire file----\n");file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointerwhile ((c = getc(file_pointer)) != EOF) printf("%c", c);fclose(file_pointer);return 0;}
Eredmény:
----read a line----Learning C with Guru99----read and parse data----Read String1 |Learning|Read String2 |C|Read String3 |with|Read String4 |Guru99|----read the entire file----Learning C with Guru99
- A fenti programban megnyitottuk az "fprintf_test.txt" nevű fájlt, amelyet korábban az fprintf () függvény segítségével írtunk, és amely tartalmazza a "Learning C with Guru99" karakterláncot. A fgets () függvény segítségével olvastuk el, amely soronként olvassa el, ahol a puffer méretének elegendőnek kell lennie az egész sor kezeléséhez.
- Újra megnyitjuk a fájlt, hogy a mutatófájl visszaálljon a fájl elejére. Hozzon létre különféle karakterlánc-változókat az egyes szavak külön kezeléséhez. A változók kinyomtatásával megtekintheti azok tartalmát. Az fscanf () főleg az adatok kinyerésére és elemzésére szolgál egy fájlból.
- Nyissa meg újra a fájlt, hogy a mutatófájl visszaálljon a fájl elejére. Olvassa el az adatokat, és nyomtassa ki fájlból karakterenként, a getc () függvény segítségével, amíg az EOF utasítás meg nem jelenik
- Miután egy olvasási műveletet végrehajtott különböző változatokkal, az fclose függvény segítségével ismét bezártuk a fájlt.
Interaktív fájl olvasás és írás a getc és a putc segítségével
Ezek a legegyszerűbb fájlműveletek. A Getc a get karaktert, a putc pedig a put karaktert jelenti. Ez a két funkció egyszerre csak egyetlen karakter kezelésére szolgál.
A következő program bemutatja a fájlkezelési funkciókat a „C” programozásban:
#includeint main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = fopen("demo.txt", "r");while ((c = getc(fp)) != EOF) {printf("%c", c);}fclose(fp);return 0;}
Kimenet:
- A fenti programban létrehoztunk és megnyitottunk egy demo nevű fájlt írási módban.
- Az írási művelet végrehajtása után a fájl bezáródik az fclose függvény segítségével.
- Újra megnyitottunk egy fájlt, amely most adatokat tartalmaz olvasási módban. Egy darab ciklus végrehajtódik, amíg az eof nem található. Miután megtalálta a fájl végét, a művelet befejeződik, és az adatok a printf funkcióval jelennek meg.
- Az olvasási művelet végrehajtása után a fájl az fclose függvény segítségével ismét bezárásra kerül.
Összegzés
- A fájl egy hely a memóriában, ahol adatokat tárolnak.
- A „C” programozás különféle funkciókat biztosít egy fájl kezeléséhez.
- A fájlokkal való manipuláció mechanizmusát fájlkezelésnek nevezzük.
- A műveletek végrehajtása előtt meg kell nyitni egy fájlt.
- A fájl olvasási, írási vagy csatolási módban nyitható meg.
- A Getc és a Putc függvények egyetlen karakter olvasására és írására szolgálnak.
- Az fscanf () függvény lehetővé teszi adatok olvasását és elemzését egy fájlból
- Egy teljes fájlt elolvashatunk ( a getc függvény használatával) az összes fájl lefedésével hurokolással, amíg az EOF-be nem kerül
- Írhatunk egy fájlba, miután létrehoztuk a nevét, az fprintf () függvény használatával, és a karakterlánc végén a newline karakterrel kell rendelkeznie.