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,
- Izrada datoteke
- Otvaranje datoteke
- Čitanje datoteke
- Zapisivanje u datoteku
- 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.
Možete odrediti stazu na kojoj želite stvoriti datoteku
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
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:
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.
- 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.
- 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:
- U gornjem programu stvorili smo i otvorili datoteku pod nazivom fputs_test.txt u načinu pisanja.
- Nakon što izvršimo operaciju pisanja pomoću funkcije fputs() zapisujući tri različita žice
- 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:
- U gornjem programu stvorili smo i otvorili datoteku pod nazivom fprintf_test.txt u načinu pisanja.
- 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
- 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.
- 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.
- 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
- 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:
- U gornjem programu stvorili smo i otvorili datoteku pod nazivom demo u načinu pisanja.
- Nakon što se izvrši operacija pisanja, datoteka se zatvara pomoću funkcije fclose.
- 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.
- 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.