C Failihaldus
Faili saab kasutada suure hulga püsivate andmete salvestamiseks. Nagu paljud teised keeled, pakub ka C failihalduse funktsioone,
- Faili loomine
- Faili avamine
- Faili lugemine
- Faili kirjutamine
- Faili sulgemine
Allpool on toodud kõige olulisemad failis haldamise funktsioonid, mis on saadaval jaotises C
funktsioon | eesmärk |
fopen () | Faili loomine või olemasoleva faili avamine |
fclose () | Faili sulgemine |
fprintf () | Andmeploki kirjutamine faili |
fscanf () | Plokist andmete lugemine failist |
getc () | Loeb failist ühe märgi |
putc () | Kirjutab faili ühe märgi |
getw () | Loeb failist täisarvu |
putw () | Täisarvu kirjutamine faili |
fseek () | Määrab failikursori asukoha määratud asukohta |
ftell () | Tagastab faili kursori praeguse positsiooni |
tagasi kerida () | Määrab faili kursori faili alguses |
Selles õpetuses saate teada
- Kuidas faili luua
- Faili sulgemine:
- Faili kirjutamine
- fputc () Funktsioon:
- sisendid () Funktsioon:
- fprintf () Funktsioon:
- Andmete lugemine failist
- Interaktiivne faili lugemine ja kirjutamine getc ja putc abil
Kuidas faili luua
Alati, kui soovite failiga töötada, on faili loomine esimene samm. Fail ei ole muud kui ruum mälus, kuhu andmed on salvestatud.
Faili loomiseks C-programmis kasutatakse süntaksit järgides:
FILE *fp;fp = fopen ("file_name", "mode");
Ülaltoodud süntaksis on fail andmestruktuur, mis on määratletud standardses teegis.
fopen on standardfunktsioon, mida kasutatakse faili avamiseks.
- Kui faili süsteemis pole, siis see luuakse ja seejärel avatakse.
- Kui fail on süsteemis juba olemas, avatakse see selle funktsiooni abil otse.
fp on faili kursor, mis osutab tüübifailile.
Alati, kui faili avate või loote, peate määrama, mida te failiga teete. C-programmeerimisega faili saab luua või avada lugemise / kirjutamise eesmärgil. Režiimi kasutatakse selleks, et määrata, kas soovite faili avada allpool toodud eesmärkidel. Järgnevalt on toodud erinevad C-programmeerimise režiimid, mida saab failiga töötades kasutada.
Failirežiim | Kirjeldus |
r | Avage fail lugemiseks. Kui fail on lugemisrežiimis, siis andmeid ei kustutata, kui fail on süsteemis juba olemas. |
w | Avage kirjutamiseks fail. Kui fail on kirjutusrežiimis, luuakse uus fail, kui faili pole üldse olemas. Kui fail on süsteemis juba olemas, siis kõik failis olevad andmed kärbitakse ja see avatakse kirjutamise eesmärgil. |
a | Avage fail liitmisrežiimis. Kui fail on liitmisrežiimis, siis fail avatakse. Faili sisu ei muutu. |
r + | algusest peale avatud lugemiseks ja kirjutamiseks |
w + | avatud lugemiseks ja kirjutamiseks, faili ülekirjutamiseks |
a + | avatud lugemiseks ja kirjutamiseks, lisamine faili |
Antud süntaksis on failinimi ja režiim määratud stringidena, mistõttu peavad need alati jääma jutumärkidesse.
Näide:
#includeint main() {FILE *fp;fp = fopen ("data.txt", "w");}
Väljund:
Fail luuakse samasse kausta, kuhu olete oma koodi salvestanud.
Saate määrata tee, kuhu soovite oma faili luua
#includeint main() {FILE *fp;fp = fopen ("D://data.txt", "w");}
Kuidas faili sulgeda
Alati tuleb fail sulgeda, kui toimingud failis on lõppenud. See tähendab, et faili sisu ja lingid on lõpetatud. See hoiab ära faili juhusliku kahjustamise.
'C' pakub funktsiooni fclose faili sulgemise toimingu tegemiseks. Fclose'i süntaks on järgmine,
fclose (file_pointer);
Näide:
FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);
Funktsioon fclose võtab argumendiks faili kursori. Seejärel suletakse failikursoriga seotud fail funktsiooni fclose abil. See tagastab 0, kui sulgemine õnnestus, ja EOF (faili lõpp), kui faili sulgemisel on tekkinud viga.
Pärast faili sulgemist saab sama faili kursorit kasutada ka teiste failidega.
Programmis „C” suletakse failid automaatselt, kui programm lõpetatakse. Faili käsitsi sulgemine funktsiooni fclose kirjutamise abil on hea programmeerimistava.
Faili kirjutamine
C-s tuleb faili kirjutades selgesõnaliselt lisada uue rea tähemärgid '\ n'.
Stdio teek pakub faili kirjutamiseks vajalikke funktsioone:
- fputc (char, file_pointer) : see kirjutab faili, millele fail_pointer osutab, märgi.
- sisendid (str, file_pointer) : see kirjutab faili stringi, millele fail_pointer osutab.
- fprintf (file_pointer, str, variable_lists) : see prindib failile stringi, millele fail_pointer osutab. String võib soovi korral sisaldada vorminguspetsifikaate ja muutujate loendit variable_lists.
Allpool olev programm näitab, kuidas faili kirjutada:
fputc () Funktsioon:
#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;}
Väljund:
Ülaltoodud programm kirjutab faili fputc_test.txt ühe tähemärgi, kuni see jõuab järgmise rea sümbolini "\ n", mis näitab, et lause on edukalt kirjutatud. Protsessiks on massiivi iga märgi võtmine ja faili kirjutamine.
- Eespool nimetatud programmis oleme kirjutamisrežiimis loonud ja avanud faili nimega fputc_test.txt ning deklareerinud oma stringi, mis faili kirjutatakse.
- Teeme märkide kaupa märkide kaupa kirjutamise operatsiooni loopi jaoks ja paneme iga tähemärgi oma faili seni, kuni ilmub märk \ n, seejärel fail suletakse funktsiooni fclose abil.
sisendid () Funktsioon:
#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);}
VÄLJUND:
- Eespool nimetatud programmis oleme kirjutamisrežiimis loonud ja avanud faili nimega fputs_test.txt.
- Pärast seda, kui oleme teinud kirjutamisoperatsiooni funktsiooni fputs () abil, kirjutades kolm erinevat stringi
- Seejärel fail suletakse funktsiooni fclose abil.
fprintf () Funktsioon:
#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;}
VÄLJUND:
- Eespool nimetatud programmis oleme kirjutamisrežiimis loonud ja avanud faili nimega fprintf_test.txt.
- Kui kirjutamistoiming on tehtud funktsiooni fprintf () abil, kirjutades stringi, siis fail suletakse funktsiooni fclose abil.
Andmete lugemine failist
Failist andmete lugemiseks on pühendatud kolm erinevat funktsiooni
- fgetc (file_pointer): See tagastab failist järgmise tähemärgi, millele faili kursor osutab. Kui faili lõpp on käes, saadetakse EOF tagasi.
- fgets (puhver, n, file_pointer): see loeb failist n-1 tähemärki ja salvestab stringi puhvrisse, kuhu viimase tähemärgina on lisatud NULL-märk '\ 0'.
- fscanf (file_pointer, conversion_specifiers, variable_adresses) : Seda kasutatakse andmete sõelumiseks ja analüüsimiseks. See loeb failist tähemärgid ja määrab sisendi teisendusspetsialistide abil muutujapointerite loendisse muutujad aadressid. Pidage meeles, et nagu ka scanf puhul, lõpetab fscanf stringi lugemise, kui ilmub tühik või uus rida.
Järgmine programm demonstreerib failist fputs_test.txt lugemist, kasutades funktsioone fgets (), fscanf () ja fgetc ():
#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;}
Tulemus:
----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
- Eespool nimetatud programmis oleme avanud faili nimega "fprintf_test.txt", mis oli varem kirjutatud funktsiooni fprintf () abil ja sisaldab stringi "Learning C with Guru99". Me lugesime seda funktsiooni fgets () abil, mis loeb rida realt, kus puhvri suurus peab olema terve rea käsitsemiseks piisav.
- Ava faili uuesti, et kursorifail lähtestada faili alguses. Looge erinevaid stringimuutujaid, et iga sõna eraldi käsitseda. Nende sisu nägemiseks printige muutujad. Fscanf () kasutatakse peamiselt failist andmete eraldamiseks ja sõelumiseks.
- Kursori faili lähtestamiseks faili alguses taaskäivitage fail. Lugege andmeid ja printige need faili järgi märkide kaupa funktsiooni getc () abil, kuni ilmub EOF-lause
- Pärast lugemisoperatsiooni faili sooritamist erinevate variantide abil sulgesime faili uuesti funktsiooni fclose abil.
Interaktiivne faili lugemine ja kirjutamine getc ja putc abil
Need on lihtsamad failitoimingud. Getc tähistab tähemärki ja putc tähistab tähemärki. Neid kahte funktsiooni kasutatakse korraga ainult ühe märgi käsitsemiseks.
Järgmine programm näitab failide käitlemise funktsioone programmeerimisel C:
#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;}
Väljund:
- Ülaltoodud programmis oleme kirjutusrežiimis loonud ja avanud faili nimega demo.
- Pärast kirjutamistoimingu tegemist suletakse fail funktsiooni fclose abil.
- Oleme taas avanud faili, mis sisaldab nüüd andmeid lugemisrežiimis. Tükk aega kestab tsükkel, kuni eof on leitud. Kui faili lõpp on leitud, lõpetatakse toiming ja andmeid kuvatakse funktsiooni printf abil.
- Pärast lugemise toimingut suletakse fail uuesti funktsiooni fclose abil.
Kokkuvõte
- Fail on mälus olev koht, kuhu andmed salvestatakse.
- C-programmeerimine pakub failiga tegelemiseks erinevaid funktsioone.
- Failidega manipuleerimise mehhanismi nimetatakse failihalduseks.
- Enne sellega toimingute tegemist tuleb fail avada.
- Faili saab avada lugemis-, kirjutamis- või lisamisrežiimis.
- Getc ja putc funktsioone kasutatakse ühe märgi lugemiseks ja kirjutamiseks.
- Funktsioon fscanf () võimaldab failist andmeid lugeda ja sõeluda
- Saame lugeda (kasutades funktsiooni getc ) kogu faili silmuse abil, et katta kogu fail, kuni EOF on leitud
- Me saame faili kirjutada pärast selle nime loomist, kasutades funktsiooni fprintf () ja stringi teksti lõpus peab sellel olema uus joon.