logo

Grunnleggende om filhåndtering i C

Fillevering C er prosessen der vi oppretter, åpner, leser, skriver og lukker operasjoner på en fil. C-språket gir forskjellige funksjoner som fopen(), fwrite(), fread(), fseek(), fprintf(), etc. for å utføre input, output og mange forskjellige C-filoperasjoner i programmet vårt.

Hvorfor trenger vi filhåndtering i C?

Så langt er operasjonene med C-programmet gjort på en ledetekst/terminal som ikke er lagret noe sted. Utgangen slettes når programmet lukkes. Men i programvareindustrien er de fleste programmer skrevet for å lagre informasjonen som hentes fra programmet. Bruken av filhåndtering er akkurat det situasjonen krever.



For å forstå hvorfor filhåndtering er viktig, la oss se på noen funksjoner ved bruk av filer:

  • Gjenbrukbarhet: Dataene som er lagret i filen kan nås, oppdateres og slettes hvor som helst og når som helst, noe som gir høy gjenbrukbarhet.
  • Portabilitet: Uten å miste data kan filer overføres til en annen i datasystemet. Risikoen for feil koding minimeres med denne funksjonen.
  • Effektiv: En stor mengde input kan være nødvendig for noen programmer. Filhåndtering lar deg enkelt få tilgang til en del av en fil ved hjelp av få instruksjoner som sparer mye tid og reduserer sjansen for feil.
  • Lagringskapasitet: Filer lar deg lagre en stor mengde data uten å måtte bekymre deg for å lagre alt samtidig i et program.

Filtyper i C

En fil kan klassifiseres i to typer basert på måten filen lagrer dataene på. De er som følger:

  • Tekstfiler
  • Binære filer



1. Tekstfiler

En tekstfil inneholder data i form av ASCII-tegn og brukes vanligvis til å lagre en strøm av tegn.

  • Hver linje i en tekstfil slutter med et nytt linjetegn (' ').
  • Den kan leses eller skrives av en hvilken som helst tekstredigerer.
  • De er vanligvis lagret med .tekst filutvidelse.
  • Tekstfiler kan også brukes til å lagre kildekoden.

2. Binære filer

En binær fil inneholder data i binær form (dvs. 0-er og 1-er) i stedet for ASCII-tegn. De inneholder data som er lagret på en lignende måte som den er lagret i hovedminnet.

forskjellen mellom array og arraylist
  • De binære filene kan bare opprettes fra et program, og innholdet kan bare leses av et program.
  • Mer sikre siden de ikke er lett lesbare.
  • De er vanligvis lagret med .bin filutvidelse.

C Filoperasjoner

C-filoperasjoner refererer til de forskjellige mulige operasjonene som vi kan utføre på en fil i C, for eksempel:



  1. Opprette en ny fil – fopen() med attributter som a eller a+ eller w eller w+
  2. Åpne en eksisterende fil – fopen()
  3. Leser fra fil – fscanf() eller fgets()
  4. Skrive til en fil – fprintf() eller fputs()
  5. Flytte til et bestemt sted i en fil – fseek() , spole tilbake()
  6. Lukke en fil – fclose()

Den uthevede teksten nevner C-funksjonen som brukes til å utføre filoperasjonene.

Funksjoner for C-filoperasjoner

filhåndtering i c

Filpeker i C

En filpeker er en referanse til en bestemt posisjon i den åpnede filen. Den brukes i filhåndtering for å utføre alle filoperasjoner som å lese, skrive, lukke osv. Vi bruker FIL makro for å erklære filpekervariabelen. FIL-makroen er definert inne header-fil.

Syntaks for filpeker

  FILE*     pointer_name  ;>

File Pointer brukes i nesten alle filoperasjoner i C.

Åpne en fil i C

For å åpne en fil i C, fopen() funksjonen brukes med filnavnet eller filbanen sammen med de nødvendige tilgangsmodusene.

Syntaks for fopen()

FILE*   fopen  (const char *  file_name  , const char *  access_mode  );>

Parametere

  • filnavn : navnet på filen når den finnes i samme katalog som kildefilen. Ellers full vei.
  • tilgangsmodus: Angir for hvilken operasjon filen åpnes.

Returverdi

  • Hvis filen åpnes vellykket, returnerer en filpeker til den.
  • Hvis filen ikke åpnes, returneres NULL.

Filåpningsmoduser i C

Filåpningsmoduser eller tilgangsmoduser spesifiserer de tillatte operasjonene på filen som skal åpnes. De sendes som et argument til fopen()-funksjonen. Noen av de mest brukte filtilgangsmodusene er oppført nedenfor:

Åpningsmoduser Beskrivelse
r Søker i filen. Hvis filen åpnes vellykket, laster fopen( ) den inn i minnet og setter opp en peker som peker til det første tegnet i den. Hvis filen ikke kan åpnes, returnerer fopen( ) NULL.
rb Åpne for lesing i binær modus. Hvis filen ikke eksisterer, returnerer fopen( ) NULL.
I Åpne for skriving i tekstmodus. Hvis filen eksisterer, blir innholdet overskrevet. Hvis filen ikke eksisterer, opprettes en ny fil. Returnerer NULL, hvis ikke kan åpne filen.
wb Åpne for skriving i binær modus. Hvis filen eksisterer, blir innholdet overskrevet. Hvis filen ikke eksisterer, vil den bli opprettet.
en Søker i filen. Hvis filen åpnes vellykket, laster fopen( ) den inn i minnet og setter opp en peker som peker til det siste tegnet i den. Den åpnes bare i tilleggsmodus. Hvis filen ikke eksisterer, opprettes en ny fil. Returnerer NULL, hvis ikke kan åpne filen.
ab Åpne for å legge til i binær modus. Data legges til på slutten av filen. Hvis filen ikke eksisterer, vil den bli opprettet.
r+ Søker i filen. Den åpnes vellykket fopen( ) laster den inn i minnet og setter opp en peker som peker til det første tegnet i den. Returnerer NULL hvis du ikke kan åpne filen.
rb+ Åpen for både lesing og skriving i binær modus. Hvis filen ikke eksisterer, returnerer fopen( ) NULL.
w+ Søker i filen. Hvis filen eksisterer, blir innholdet overskrevet. Hvis filen ikke eksisterer, opprettes en ny fil. Returnerer NULL hvis du ikke kan åpne filen.
wb+ Åpen for både lesing og skriving i binær modus. Hvis filen eksisterer, blir innholdet overskrevet. Hvis filen ikke eksisterer, vil den bli opprettet.
a+ Søker i filen. Hvis filen åpnes vellykket, laster fopen( ) den inn i minnet og setter opp en peker som peker til det siste tegnet i den. Den åpner filen i både lese- og tilleggsmodus. Hvis filen ikke eksisterer, opprettes en ny fil. Returnerer NULL hvis du ikke kan åpne filen.
ab+ Åpen for både lesing og vedlegg i binær modus. Hvis filen ikke eksisterer, vil den bli opprettet.

Som gitt ovenfor, hvis du vil utføre operasjoner på en binær fil, må du legge til 'b' til slutt. For eksempel, i stedet for w, må du bruke wb, i stedet for a+ må du bruke a+b.

Eksempel på å åpne en fil

C




// C Program to illustrate file opening> #include> #include> int> main()> {> >// file pointer variable to store the value returned by> >// fopen> >FILE>* fptr;> >// opening the file in read mode> >fptr =>fopen>(>'filename.txt'>,>'r'>);> >// checking if the file is opened successfully> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'now exit.'>);> >exit>(0);> >}> >return> 0;> }>

>

>

Produksjon

The file is not opened. The program will now exit.>

Filen åpnes ikke fordi den ikke finnes i kildekatalogen. Men fopen()-funksjonen er også i stand til å lage en fil hvis den ikke eksisterer. Det er vist nedenfor

Lag en fil i C

Fopen()-funksjonen kan ikke bare åpne en fil, men kan også opprette en fil hvis den ikke allerede eksisterer. For det må vi bruke modusene som tillater opprettelse av en fil hvis den ikke finnes, for eksempel w, w+, wb, wb+, a, a+, ab og ab+.

FILE *fptr; fptr =   fopen  ('  filename.txt  ', '  w  ');>

Eksempel på å åpne en fil

C




// C Program to create a file> #include> #include> int> main()> {> >// file pointer> >FILE>* fptr;> >// creating file using fopen() access mode 'w'> >fptr =>fopen>(>'file.txt'>,>'w'>);> >// checking if the file is created> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'exit now'>);> >exit>(0);> >}> >else> {> >printf>(>'The file is created Successfully.'>);> >}> > >return> 0;> }>

>

>

Produksjon

The file is created Successfully.>

Lese fra en fil

Filleseoperasjonen i C kan utføres ved å bruke funksjonene fscanf() eller fgets(). Begge funksjonene utførte de samme operasjonene som scanf og gets, men med en ekstra parameter, filpekeren. Det er også andre funksjoner vi kan bruke for å lese fra en fil. Slike funksjoner er listet opp nedenfor:

Funksjon Beskrivelse
fscanf() Bruk formatert streng og liste med variable argumenter for å ta inndata fra en fil.
fgets() Skriv inn hele linjen fra filen.
fgetc() Leser et enkelt tegn fra filen.
få() Leser et tall fra en fil.
fread() Leser de angitte databytene fra en binær fil.

Så det avhenger av deg om du vil lese filen linje for linje eller tegn for tegn.

Eksempel:

FILE * fptr;  fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>

Getc() og noen andre fillesingsfunksjoner returnerer EOF (End Of File) når de når slutten av filen mens de leser. EOF indikerer slutten av filen og verdien er implementeringsdefinert.

Merk: En ting å merke seg her er at etter å ha lest en bestemt del av filen, vil filpekeren automatisk flyttes til slutten av det sist leste tegnet.

Skriv til en fil

Filskriveoperasjonene kan utføres av funksjonene fprintf() og fputs() med likheter med leseoperasjoner. C-programmering gir også noen andre funksjoner som kan brukes til å skrive data til en fil, for eksempel:

Funksjon Beskrivelse
fprintf() I likhet med printf(), bruker denne funksjonen formatert streng og liste med variable argumenter for å skrive ut utdata til filen.
fputs() Skriver ut hele linjen i filen og en ny linje på slutten.
fputc() Skriver ut et enkelt tegn i filen.
fputw() Skriver ut et nummer til filen.
fwrite() Denne funksjonen skriver den angitte mengden byte til den binære filen.

Eksempel:

FILE *fptr ;  fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);>

Lukke en fil

Funksjonen fclose() brukes til å lukke filen. Etter vellykkede filoperasjoner, må du alltid lukke en fil for å fjerne den fra minnet.

Syntaks for fclose()

  fclose  (  file_pointer  );>

hvor i file_pointer er pekeren til den åpnede filen.

Eksempel:

FILE *fptr ; fptr= fopen(fileName.txt, w); ----------   Some file Operations   ------- fclose(fptr);>

Eksempler på fillevering i C

Eksempel 1: Program for å lage en fil, skrive i den og lukke filen

C




// C program to Open a File,> // Write in it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Get the data to be written in file> >char> dataToBeWritten[50] =>'techcodeview.com-A Computer '> >'Science Portal for Geeks'>;> >// Open the existing file GfgTest.c using fopen()> >// in write mode using 'w' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'w'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Write the dataToBeWritten into the file> >if> (>strlen>(dataToBeWritten)>0) {> >// writing in the file using fputs()> >fputs>(dataToBeWritten, filePointer);> >fputs>(>' '>, filePointer);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(>'Data successfully written in file '> >'GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> > >return> 0;> }>

>

>

Produksjon

The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>

Dette programmet vil lage en fil som heter GfgTest.c i samme katalog som kildefilen som vil inneholde følgende tekst: techcodeview.com-A Computer Science Portal for Geeks.

Eksempel 2: Program for å åpne en fil, lese fra den og lukke filen

C




// C program to Open a File,> // Read from it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Declare the variable for the data to be read from> >// file> >char> dataToBeRead[50];> >// Open the existing file GfgTest.c using fopen()> >// in read mode using 'r' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'r'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Read the dataToBeRead from the file> >// using fgets() method> >while> (>fgets>(dataToBeRead, 50, filePointer)> >!= NULL) {> >// Print the dataToBeRead> >printf>(>'%s'>, dataToBeRead);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(> >'Data successfully read from file GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> >return> 0;> }>

>

>

Produksjon

The file is now opened. techcodeview.com-A Computer Science Portal for Geeks Data successfully read from file GfgTest.c The file is now closed.>

Dette programmet leser teksten fra filen GfgTest.c som vi opprettet i forrige eksempel og skriver den ut i konsollen.

Les og skriv i en binær fil

Til nå har vi bare diskutert tekstfiloperasjoner. Operasjonene på en binær fil ligner på tekstfiloperasjoner med liten forskjell.

Åpne en binær fil

For å åpne en fil i binær modus bruker vi tilgangsmodusene rb, rb+, ab, ab+, wb og wb+ i fopen()-funksjonen. Vi bruker også filtypen .bin i det binære filnavnet.

Eksempel

fptr = fopen('filename.bin', 'rb');>

Skriv til en binær fil

Vi bruker funksjonen fwrite() for å skrive data til en binær fil. Dataene skrives til den binære filen i fra-biter (0-er og 1-er).

Syntaks for fwrite()

size_t   fwrite  (const void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parametere:

  • ptr: peker til minneblokken som skal skrives.
  • størrelse: størrelsen på hvert element som skal skrives (i byte).
  • nmemb: antall elementer.
  • file_pointer : FIL-peker til utdatafilstrømmen.

Returverdi:

  • Antall skrevet objekter.

Eksempel: Program for å skrive til en binær fil ved hjelp av fwrite()

C




// C program to write to a Binary file using fwrite()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >// Structure variable declared here.> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'wb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >int> flag = 0;> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >num.n1 = n;> >num.n2 = 5 * n;> >num.n3 = 5 * n + 1;> >flag =>fwrite>(&num,>sizeof>(>struct> threeNum), 1,> >fptr);> >}> >// checking if the data is written> >if> (!flag) {> >printf>(>'Write Operation Failure'>);> >}> >else> {> >printf>(>'Write Operation Successful'>);> >}> >fclose>(fptr);> > >return> 0;> }>

>

>

Produksjon

Write Operation Successful>

Leser fra binær fil

Fread()-funksjonen kan brukes til å lese data fra en binær fil i C. Dataene leses fra filen i samme form som den er lagret, dvs. binær form.

Syntaks for fread()

size_t   fread  (void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parametere:

  • ptr: pekeren til minneblokken som skal leses.
  • størrelse: størrelsen på hvert element som skal leses (i byte).
  • nmemb: antall elementer.
  • file_pointer : FIL-peker til inndatafilstrømmen.

Returverdi:

  • Antall skrevet objekter.

Eksempel: Program for å lese fra en binær fil ved hjelp av fread()

C




// C Program to Read from a binary file using fread()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'rb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >fread>(&num,>sizeof>(>struct> threeNum), 1, fptr);> >printf>(>'n1: %d n2: %d n3: %d '>, num.n1, num.n2,> >num.n3);> >}> >fclose>(fptr);> >return> 0;> }>

>

>

Produksjon

n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>

fseek() i C

Hvis vi har flere poster inne i en fil og trenger tilgang til en bestemt post som er på en bestemt posisjon, så må vi gå gjennom alle postene før den for å få posten. Å gjøre dette vil kaste bort mye minne og driftstid. For å redusere minneforbruk og driftstid kan vi bruke fseek() som gir en enklere måte å komme til de nødvendige dataene. fseek()-funksjonen i C søker markøren til den gitte posten i filen.

Syntaks for fseek()

int fseek(FILE *ptr, long int offset, int pos);>

Eksempel på fseek()

C




// C Program to demonstrate the use of fseek() in C> #include> int> main()> {> >FILE>* fp;> >fp =>fopen>(>'test.txt'>,>'r'>);> >// Moving pointer to end> >fseek>(fp, 0, SEEK_END);> >// Printing position of pointer> >printf>(>'%ld'>,>ftell>(fp));> >return> 0;> }>

>

>

java tostring-metoden

Produksjon

81>

rewind() i C

De spole() funksjonen brukes til å bringe filpekeren til begynnelsen av filen. Den kan brukes i stedet for fseek() når du vil ha filpekeren i starten.

Syntaks for spole tilbake()

  rewind   (  file_pointer  );>

Eksempel

C




// C program to illustrate the use of rewind> #include> int> main()> {> >FILE>* fptr;> >fptr =>fopen>(>'file.txt'>,>'w+'>);> >fprintf>(fptr,>'Geeks for Geeks '>);> >// using rewind()> >rewind>(fptr);> >// reading from file> >char> buf[50];> >fscanf>(fptr,>'%[^ ]s'>, buf);> >printf>(>'%s'>, buf);> >return> 0;> }>

>

>

Produksjon

Geeks for Geeks>

Flere funksjoner for C-filoperasjoner

Tabellen nedenfor viser noen flere funksjoner som kan brukes til å utføre filoperasjoner eller hjelpe til med å utføre dem.

Funksjoner Beskrivelse
fopen() Den brukes til å lage en fil eller åpne en fil.
fclose() Den brukes til å lukke en fil.
fgets() Den brukes til å lese en fil.
fprintf() Den brukes til å skrive blokker med data inn i en fil.
fscanf() Den brukes til å lese blokker med data fra en fil.
getc() Den brukes til å lese et enkelt tegn til en fil.
putc() Den brukes til å skrive et enkelt tegn til en fil.
fseek() Den brukes til å sette posisjonen til en filpeker til et nevnt sted.
ftell() Den brukes til å returnere gjeldende posisjon til en filpeker.
spole() Den brukes til å sette filpekeren til begynnelsen av en fil.
putw() Den brukes til å skrive et heltall til en fil.
getw() Den brukes til å lese et heltall fra en fil.