C I/O datoteka: Stvaranje, otvaranje, čitanje, pisanje i zatvaranje datoteke

C Upravljanje datotekama

Datoteka se može koristiti za pohranu velike količine trajnih podataka. Kao i mnogi drugi jezici 'C' nudi sljedeće funkcije upravljanja datotekama,

  1. Izrada datoteke
  2. Otvaranje datoteke
  3. Čitanje datoteke
  4. Zapisivanje u datoteku
  5. Zatvaranje datoteke

Slijede najvažnije funkcije upravljanja datotekama koje su dostupne u 'C,'

funkcija svrha
otvori () Stvaranje datoteke ili otvaranje postojeće datoteke
fclose () Zatvaranje datoteke
fprintf() Zapisivanje bloka podataka u datoteku
fscanf () Čitanje blok podataka iz datoteke
getc () Čita jedan znak iz datoteke
putc () Zapisuje jedan znak u datoteku
getw () Čita cijeli broj iz datoteke
putw () Zapisivanje cijelog broja u datoteku
fseek () Postavlja položaj pokazivača datoteke na određeno mjesto
reći () Vraća trenutni položaj pokazivača datoteke
premotavanje () Postavlja pokazivač datoteke na početak datoteke

Kako stvoriti datoteku

Kad god želite raditi s datotekom, prvi korak je stvaranje datoteke. Datoteka nije ništa drugo nego prostor u memoriji gdje se pohranjuju podaci.

Za stvaranje datoteke u 'C' programu koristi se sljedeća sintaksa,

FILE *fp;
fp = fopen ("file_name", "mode");

U gornjoj sintaksi, datoteka je struktura podataka koja je definirana u standardnoj biblioteci.

fopen je standardna funkcija koja se koristi za otvaranje datoteke.

  • Ako datoteka nije prisutna u sustavu, tada se stvara i zatim otvara.
  • Ako je datoteka već prisutna u sustavu, tada se izravno otvara pomoću ovoga funkcija.

fp je pokazivač datoteke koji pokazuje na tip datoteke.

Kad god otvorite ili stvorite datoteku, morate odrediti što ćete učiniti s datotekom. Datoteka u 'C' programiranju može se stvoriti ili otvoriti za potrebe čitanja/pisanja. Način se koristi za određivanje želite li otvoriti datoteku za bilo koju od dolje navedenih svrha. Slijede različite vrste načina u 'C' programiranju koji se mogu koristiti tijekom rada s datotekom.

Način datoteke Description
r Otvorite datoteku za čitanje. Ako je datoteka u načinu čitanja, podaci se ne brišu ako je datoteka već prisutna u sustavu.
w Otvorite datoteku za pisanje. Ako je datoteka u načinu pisanja, tada se stvara nova datoteka ako datoteka uopće ne postoji. Ako je datoteka već prisutna u sustavu, tada su svi podaci unutar datoteke skraćeni i ona se otvara za potrebe pisanja.
a Otvorite datoteku u
način dodavanja. Ako je datoteka u načinu dodavanja, tada se otvara. Sadržaj unutar datoteke se ne mijenja.
r+ otvoren za čitanje i pisanje od početka
w+ otvoren za čitanje i pisanje, prepisivanje preko datoteke
a+ otvoren za čitanje i pisanje, dodavanje u datoteku

U zadanoj sintaksi, naziv datoteke i način navedeni su kao nizovi stoga uvijek moraju biti u dvostrukim navodnicima.

Primjer:

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("data.txt", "w");
}

Izlaz:

Datoteka se stvara u istoj mapi u kojoj ste spremili svoj kod.

Kako stvoriti datoteku

Možete odrediti stazu na kojoj želite stvoriti datoteku

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("D://data.txt", "w");
}

Kako stvoriti datoteku

Kako zatvoriti datoteku

Datoteku treba uvijek zatvoriti kad god su operacije nad datotekom završene. To znači da su sadržaj i veze na datoteku prekinuti. Time se sprječava slučajno oštećenje datoteke.

'C' pruža funkciju fclose za izvođenje operacije zatvaranja datoteke. Sintaksa fclose je sljedeća,

fclose (file_pointer);

Primjer:

FILE *fp;
fp  = fopen ("data.txt", "r");
fclose (fp);

Funkcija fclose uzima pokazivač datoteke kao argument. Datoteka povezana s pokazivačem datoteke tada se zatvara uz pomoć funkcije fclose. Vraća 0 ako je zatvaranje bilo uspješno i EOF (kraj datoteke) ako je došlo do pogreške tijekom zatvaranja datoteke.

Nakon zatvaranja datoteke, isti pokazivač datoteke može se koristiti i s drugim datotekama.

U 'C' programiranju, datoteke se automatski zatvaraju kada se program prekine. Ručno zatvaranje datoteke pisanjem funkcije fclose dobra je programska praksa.

Zapisivanje u datoteku

U C-u, kada pišete u datoteku, znakovi novog retka '\n' moraju biti eksplicitno dodani.

Biblioteka stdio nudi potrebne funkcije za pisanje u datoteku:

  • fputc(char, file_pointer): Zapisuje znak u datoteku na koju ukazuje file_pointer.
  • fputs(str, file_pointer): Zapisuje niz u datoteku na koju ukazuje file_pointer.
  • fprintf(file_pointer, str, variable_lists): Ispisuje niz u datoteku na koju ukazuje file_pointer. Niz po izboru može uključivati ​​specifikatore formata i popis varijabli variable_lists.

Donji program pokazuje kako izvesti pisanje u datoteku:

Funkcija fputc():

#include <stdio.h>
int 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;
    }

Izlaz:

Zapisivanje u datoteku

Gornji program upisuje jedan znak u fputc_test.txt dok ne dođe do simbola sljedećeg retka “\n” koji označava da je rečenica uspješno napisana. Proces je uzeti svaki znak niza i zapisati ga u datoteku.

Zapisivanje u datoteku

  1. U gornjem programu kreirali smo i otvorili datoteku pod nazivom fputc_test.txt u načinu pisanja i deklarirali naš niz koji će biti zapisan u datoteku.
  2. Izvodimo operaciju pisanja znak po znak koristeći for petlju i stavljamo svaki znak u našu datoteku sve dok se ne naiđe na znak "\n", a zatim se datoteka zatvara pomoću funkcije fclose.

fputs () Funkcija:

#include <stdio.h>
int 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);
    }

Izlaz:

Zapisivanje u datoteku

Zapisivanje u datoteku

  1. U gornjem programu stvorili smo i otvorili datoteku pod nazivom fputs_test.txt u načinu pisanja.
  2. Nakon što izvršimo operaciju pisanja pomoću funkcije fputs() zapisujući tri različita žice
  3. Zatim se datoteka zatvara pomoću funkcije fclose.

fprintf()funkcija:

#include <stdio.h>
    int 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;
    }

Izlaz:

Zapisivanje u datoteku

Zapisivanje u datoteku

  1. U gornjem programu stvorili smo i otvorili datoteku pod nazivom fprintf_test.txt u načinu pisanja.
  2. Nakon što se operacija pisanja izvrši pomoću funkcije fprintf() pisanjem niza, datoteka se zatvara pomoću funkcije fclose.

Čitanje podataka iz datoteke

Postoje tri različite funkcije posvećene čitanju podataka iz datoteke

  • fgetc(pokazivač_datoteke): Vraća sljedeći znak iz datoteke na koju pokazuje pokazivač datoteke. Kada se dosegne kraj datoteke, EOF se šalje natrag.
  • fgets(buffer, n, file_pointer): Čita n-1 znakova iz datoteke i pohranjuje niz u međuspremnik u kojem je NULL znak '\0' dodan kao zadnji znak.
  • fscanf(file_pointer, conversion_specifiers, variable_adresses): Koristi se za raščlanjivanje i analizu podataka. Čita znakove iz datoteke i dodjeljuje unos popisu varijabilni pokazivači variable_adresses koristeći specifikatore konverzije. Imajte na umu da kao i kod scanf-a, fscanf prestaje čitati niz kada naiđe na razmak ili novi red.

Sljedeći program demonstrira čitanje iz datoteke fputs_test.txt pomoću funkcija fgets(), fscanf() i fgetc ():

#include <stdio.h>
int 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 pointer
        char 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 pointer
        while ((c = getc(file_pointer)) != EOF) printf("%c", c);

        fclose(file_pointer);
        return 0;
    }

Rezultat:

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

Čitanje podataka iz datoteke

  1. U gornjem programu otvorili smo datoteku pod nazivom “fprintf_test.txt” koja je prethodno napisana pomoću funkcije fprintf() i sadrži niz “Učenje C-a s Guru99”. Čitamo ga pomoću funkcije fgets() koja čita redak po redak gdje veličina međuspremnika mora biti dovoljna da obradi cijeli redak.
  2. Ponovno otvaramo datoteku kako bismo resetirali datoteku pokazivača da pokazuje na početak datoteke. Stvorite različite nizove varijabli za obradu svake riječi zasebno. Ispišite varijable da vidite njihov sadržaj. Fscanf() se uglavnom koristi za izdvajanje i raščlanjivanje podataka iz datoteke.
  3. Ponovno otvorite datoteku da biste vratili datoteku pokazivača na početak datoteke. Pročitajte podatke i ispišite ih iz datoteke znak po znak pomoću funkcije getc() dok se ne naiđe na naredbu EOF
  4. Nakon izvođenja operacije čitanja datoteke koristeći različite varijante, ponovno smo zatvorili datoteku pomoću funkcije fclose.

Interaktivno čitanje i pisanje datoteka s getc i putc

Ovo su najjednostavnije radnje s datotekama. Getc označava znak za dobivanje, a putc označava znak za postavljanje. Ove dvije funkcije se koriste za obradu samo jednog znaka u isto vrijeme.

Sljedeći program demonstrira funkcije rukovanja datotekama u 'C' programiranju:

#include <stdio.h>
int main() {
        FILE * fp;
        char c;
        printf("File Handling\n");
        //open a file
        fp = fopen("demo.txt", "w");
        //writing operation
        while ((c = getchar()) != EOF) {
            putc(c, fp);
        }
        //close file
        fclose(fp);
        printf("Data Entered:\n");
        //reading
        fp = fopen("demo.txt", "r");
        while ((c = getc(fp)) != EOF) {
            printf("%c", c);
        }
        fclose(fp);
        return 0;
    }

Izlaz:

Interaktivno čitanje i pisanje datoteka s getc i putc

Interaktivno čitanje i pisanje datoteka s getc i putc

  1. U gornjem programu stvorili smo i otvorili datoteku pod nazivom demo u načinu pisanja.
  2. Nakon što se izvrši operacija pisanja, datoteka se zatvara pomoću funkcije fclose.
  3. Ponovno smo otvorili datoteku koja sada sadrži podatke u načinu čitanja. Dok se ne pronađe eof petlja će se izvoditi. Nakon što se pronađe kraj datoteke, operacija će se prekinuti i podaci će se prikazati pomoću funkcije printf.
  4. Nakon izvođenja operacije čitanja datoteka se ponovno zatvara pomoću funkcije fclose.

Rezime

  • Datoteka je prostor u memoriji gdje se pohranjuju podaci.
  • 'C' programiranje pruža razne funkcije za rad s datotekom.
  • Mehanizam manipuliranja datotekama naziva se upravljanje datotekama.
  • Datoteka se mora otvoriti prije izvođenja operacija na njoj.
  • Datoteka se može otvoriti u načinu čitanja, pisanja ili dodavanja.
  • Funkcije Getc i Putc koriste se za čitanje i pisanje jednog znaka.
  • Funkcija fscanf() dopušta čitanje i analizu podataka iz datoteke
  • Možemo čitati (koristeći getc funkcija) cijelu datoteku petljom da pokrije cijelu datoteku dok se ne naiđe na EOF
  • Možemo pisati u datoteku nakon što joj stvorimo naziv, pomoću funkcije fprintf() i mora imati znak novog retka na kraju teksta niza.