logo

Osnove ravnanja z datotekami v C

Predaja datoteke v C je postopek, v katerem ustvarjamo, odpiramo, beremo, pišemo in zapiramo operacije na datoteki. Jezik C nudi različne funkcije, kot so fopen(), fwrite(), fread(), fseek(), fprintf() itd. za izvajanje vnosa, izhoda in številnih različnih operacij datoteke C v našem programu.

Zakaj potrebujemo upravljanje datotek v C?

Doslej se operacije s programom C izvajajo na pozivu/terminalu, ki ni nikjer shranjen. Izhod se izbriše, ko se program zapre. Toda v industriji programske opreme je večina programov napisanih za shranjevanje informacij, pridobljenih iz programa. Uporaba ravnanja z datotekami je natanko tisto, kar situacija zahteva.



Da bi razumeli, zakaj je upravljanje datotek pomembno, si oglejmo nekaj funkcij uporabe datotek:

  • Ponovna uporabnost: Do podatkov, shranjenih v datoteki, je mogoče dostopati, jih posodobiti in izbrisati kjer koli in kadarkoli, kar zagotavlja visoko možnost ponovne uporabe.
  • Prenosljivost: Datoteke lahko prenesete na drugega brez izgube podatkov v računalniškem sistemu. Tveganje napačnega kodiranja je s to funkcijo zmanjšano.
  • Učinkovito: Za nekatere programe bo morda potrebna velika količina vnosa. Ravnanje z datotekami vam omogoča preprost dostop do dela datoteke z nekaj navodili, kar prihrani veliko časa in zmanjša možnost napak.
  • Zmogljivost shranjevanja: Datoteke vam omogočajo shranjevanje velike količine podatkov, ne da bi vam bilo treba skrbeti, da bi vse hkrati shranili v program.

Vrste datotek v C

Datoteko lahko razvrstimo v dve vrsti glede na način, kako datoteka shranjuje podatke. So naslednji:

  • Besedilne datoteke
  • Binarne datoteke



1. Besedilne datoteke

Besedilna datoteka vsebuje podatke v obliki znakov ASCII in se običajno uporablja za shranjevanje toka znakov.

  • Vsaka vrstica v besedilni datoteki se konča z znakom nove vrstice (' ').
  • Lahko ga bere ali piše s katerim koli urejevalnikom besedil.
  • Običajno so shranjeni z .txt razširitev datoteke.
  • Besedilne datoteke lahko uporabite tudi za shranjevanje izvorne kode.

2. Binarne datoteke

Binarna datoteka vsebuje podatke v dvojiška oblika (tj. 0 in 1) namesto znakov ASCII. Vsebujejo podatke, ki so shranjeni na podoben način, kot so shranjeni v glavnem pomnilniku.

  • Binarne datoteke je mogoče ustvariti samo znotraj programa in njihovo vsebino lahko bere samo program.
  • Bolj varni, saj jih ni enostavno prebrati.
  • Običajno so shranjeni z .bin razširitev datoteke.

C Datotečne operacije

Operacije datotek C se nanašajo na različne možne operacije, ki jih lahko izvajamo na datoteki v C, kot so:



  1. Ustvarjanje nove datoteke – fopen() z atributi kot a ali a+ ali w ali w+
  2. Odpiranje obstoječe datoteke – fopen()
  3. Branje iz datoteke – fscanf() ali fgets()
  4. Pisanje v datoteko – fprintf() ali fputs()
  5. Premik na določeno mesto v datoteki – fseek() , previj nazaj()
  6. Zapiranje datoteke – fclose()

Označeno besedilo omenja funkcijo C, ki se uporablja za izvajanje operacij datoteke.

Funkcije za operacije datotek C

obdelava datotek v c

Kazalec datoteke v C

Kazalec datoteke je sklic na določen položaj v odprti datoteki. Uporablja se pri obdelavi datotek za izvajanje vseh operacij datotek, kot so branje, pisanje, zapiranje itd. Uporabljamo MAPA makro za deklaracijo spremenljivke kazalca datoteke. Makro FILE je definiran znotraj naslovna datoteka.

Sintaksa kazalca datoteke

  FILE*     pointer_name  ;>

Kazalec datoteke se uporablja v skoraj vseh operacijah datotek v C.

Odprite datoteko v C

Za odpiranje datoteke v C, fopen() funkcija se uporablja z imenom datoteke ali potjo do datoteke skupaj z zahtevanimi načini dostopa.

Sintaksa fopen()

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

Parametri

  • Ime datoteke : ime datoteke, ko je v istem imeniku kot izvorna datoteka. Sicer pa polna pot.
  • način_dostopa: Določa, za katero operacijo se datoteka odpira.

Povratna vrednost

  • Če je datoteka uspešno odprta, vrne kazalec datoteke nanjo.
  • Če datoteka ni odprta, vrne NULL.

Načini odpiranja datotek v C

Načini odpiranja datoteke ali načini dostopa določajo dovoljene operacije z datoteko, ki jo je treba odpreti. Posredujejo se kot argumenti funkciji fopen(). Nekateri pogosto uporabljeni načini dostopa do datotek so navedeni spodaj:

Načini odpiranja Opis
r Išče datoteko. Če je datoteka uspešno odprta, jo fopen() naloži v pomnilnik in nastavi kazalec, ki kaže na prvi znak v njej. Če datoteke ni mogoče odpreti, fopen( ) vrne NULL.
rb Odprto za branje v binarnem načinu. Če datoteka ne obstaja, fopen() vrne NULL.
noter Odprto za pisanje v besedilnem načinu. Če datoteka obstaja, je njena vsebina prepisana. Če datoteka ne obstaja, se ustvari nova datoteka. Vrne NULL, če datoteke ni mogoče odpreti.
wb Odprto za pisanje v binarnem načinu. Če datoteka obstaja, je njena vsebina prepisana. Če datoteka ne obstaja, bo ustvarjena.
a Išče datoteko. Če je datoteka uspešno odprta, jo fopen() naloži v pomnilnik in nastavi kazalec, ki kaže na zadnji znak v njej. Odpre se samo v načinu dodajanja. Če datoteka ne obstaja, se ustvari nova datoteka. Vrne NULL, če datoteke ni mogoče odpreti.
ab Odprto za dodajanje v binarnem načinu. Podatki se dodajo na konec datoteke. Če datoteka ne obstaja, bo ustvarjena.
r+ Išče datoteko. Odpre se uspešno. fopen( ) ga naloži v pomnilnik in nastavi kazalec, ki kaže na prvi znak v njem. Vrne NULL, če datoteke ni mogoče odpreti.
rb+ Odprto za branje in pisanje v binarnem načinu. Če datoteka ne obstaja, fopen() vrne NULL.
w+ Išče datoteko. Če datoteka obstaja, je njena vsebina prepisana. Če datoteka ne obstaja, se ustvari nova datoteka. Vrne NULL, če datoteke ni mogoče odpreti.
wb+ Odprto za branje in pisanje v binarnem načinu. Če datoteka obstaja, je njena vsebina prepisana. Če datoteka ne obstaja, bo ustvarjena.
a+ Išče datoteko. Če je datoteka uspešno odprta, jo fopen() naloži v pomnilnik in nastavi kazalec, ki kaže na zadnji znak v njej. Datoteko odpre v načinu branja in dodajanja. Če datoteka ne obstaja, se ustvari nova datoteka. Vrne NULL, če datoteke ni mogoče odpreti.
ab+ Odprto tako za branje kot za dodajanje v binarnem načinu. Če datoteka ne obstaja, bo ustvarjena.

Kot je navedeno zgoraj, če želite izvajati operacije na binarni datoteki, morate na koncu dodati 'b'. Na primer, namesto w morate uporabiti wb, namesto a+ morate uporabiti a+b.

Primer odpiranja datoteke

C




charat java

// 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;> }>

>

>

Izhod

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

Datoteka ni odprta, ker ne obstaja v izvornem imeniku. Toda funkcija fopen() lahko ustvari tudi datoteko, če ta ne obstaja. Prikazano je spodaj

Ustvarite datoteko v C

Funkcija fopen() ne more le odpreti datoteke, ampak lahko tudi ustvari datoteko, če še ne obstaja. Za to moramo uporabiti načine, ki omogočajo ustvarjanje datoteke, če ni najdena, kot so w, w+, wb, wb+, a, a+, ab in ab+.

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

Primer odpiranja datoteke

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

>

>

Izhod

The file is created Successfully.>

Branje iz datoteke

Operacijo branja datoteke v C lahko izvedete s funkcijama fscanf() ali fgets(). Obe funkciji sta izvajali enake operacije kot scanf in gets, vendar z dodatnim parametrom, kazalcem datoteke. Obstajajo tudi druge funkcije, ki jih lahko uporabimo za branje iz datoteke. Takšne funkcije so navedene spodaj:

funkcija Opis
fscanf() Uporabite oblikovani niz in seznam spremenljivih argumentov za prevzem vnosa iz datoteke.
fgets() Vnesite celotno vrstico iz datoteke.
fgetc() Prebere en znak iz datoteke.
dobiti () Prebere številko iz datoteke.
fread() Prebere določene bajte podatkov iz binarne datoteke.

Od vas je torej odvisno, ali želite brati datoteko vrstico za vrstico ali znak za znakom.

primer:

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

Getc() in nekatere druge funkcije za branje datotek vrnejo EOF (konec datoteke), ko med branjem dosežejo konec datoteke. EOF označuje konec datoteke, njegova vrednost pa je določena z implementacijo.

Opomba: Tu je treba opozoriti, da se po branju določenega dela datoteke kazalec datoteke samodejno premakne na konec zadnjega prebranega znaka.

Pisanje v datoteko

Operacije pisanja v datoteko se lahko izvajajo s funkcijama fprintf() in fputs() s podobnostmi operacijam branja. Programiranje C ponuja tudi nekatere druge funkcije, ki jih je mogoče uporabiti za zapisovanje podatkov v datoteko, kot so:

funkcija Opis
fprintf() Podobno kot printf(), ta funkcija uporablja formatiran niz in seznam spremenljivih argumentov za tiskanje izhoda v datoteko.
fputs() Natisne celotno vrstico v datoteki in novo vrstico na koncu.
fputc() Natisne en znak v datoteko.
fputw() Natisne številko v datoteko.
fwrite() Ta funkcija zapiše določeno količino bajtov v binarno datoteko.

primer:

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

Zapiranje datoteke

Funkcija fclose() se uporablja za zapiranje datoteke. Po uspešnih operacijah z datotekami morate datoteko vedno zapreti, da jo odstranite iz pomnilnika.

Sintaksa fclose()

  fclose  (  file_pointer  );>

kje za file_pointer je kazalec na odprto datoteko.

primer:

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

Primeri predaje datotek v C

Primer 1: Program za ustvarjanje datoteke, pisanje vanjo in zapiranje datoteke

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

>

multiplekser

>

Izhod

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

Ta program bo ustvaril datoteko z imenom GfgTest.c v istem imeniku kot izvorna datoteka, ki bo vsebovala naslednje besedilo: techcodeview.com-A Computer Science Portal for Geeks.

Primer 2: Program za odpiranje datoteke, branje iz nje in zapiranje datoteke

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

>

>

Izhod

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

Ta program prebere besedilo iz datoteke z imenom GfgTest.c, ki smo jo ustvarili v prejšnjem primeru, in ga natisne v konzoli.

Branje in pisanje v binarno datoteko

Do sedaj smo razpravljali samo o operacijah besedilnih datotek. Operacije v binarni datoteki so podobne operacijam v besedilni datoteki z majhnimi razlikami.

Odpiranje binarne datoteke

Za odpiranje datoteke v binarnem načinu uporabljamo način dostopa rb, rb+, ab, ab+, wb in wb+ v funkciji fopen(). V imenu binarne datoteke uporabljamo tudi pripono datoteke .bin.

Primer

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

Pisanje v binarno datoteko

Za zapis podatkov v binarno datoteko uporabljamo funkcijo fwrite(). Podatki se zapišejo v binarno datoteko v iz bitov (0 in 1).

Sintaksa fwrite()

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

Parametri:

  • ptr: kazalec na blok pomnilnika, ki ga želite zapisati.
  • velikost: velikost vsakega elementa, ki ga je treba zapisati (v bajtih).
  • nmemb: število elementov.
  • file_pointer : FILE kazalec na tok izhodne datoteke.

Povratna vrednost:

  • Število napisanih predmetov.

primer: Program za pisanje v binarno datoteko z uporabo 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;> }>

>

>

Izhod

Write Operation Successful>

Branje iz binarne datoteke

Funkcijo fread() lahko uporabite za branje podatkov iz binarne datoteke v C. Podatki se preberejo iz datoteke v enaki obliki, kot so shranjeni, tj. v binarni obliki.

Sintaksa fread()

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

Parametri:

  • ptr: kazalec na blok pomnilnika za branje.
  • velikost: velikost vsakega elementa za branje (v bajtih).
  • nmemb: število elementov.
  • file_pointer : FILE kazalec na vhodni tok datoteke.

Povratna vrednost:

  • Število napisanih predmetov.

primer: Program za branje iz binarne datoteke z uporabo 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;> }>

>

>

Izhod

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() v C

Če imamo v datoteki več zapisov in moramo dostopati do določenega zapisa, ki je na določenem mestu, moramo pregledati vse zapise pred njim, da dobimo zapis. S tem boste izgubili veliko pomnilnika in delovnega časa. Za zmanjšanje porabe pomnilnika in časa delovanja lahko uporabimo fseek() ki omogoča lažjo pot do zahtevanih podatkov. Funkcija fseek() v C išče kazalec na podani zapis v datoteki.

Sintaksa za fseek()

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

Primer 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;> }>

>

hrithik roshan
>

Izhod

81>

previjanje() v C

The previj nazaj() funkcija se uporablja za postavitev kazalca datoteke na začetek datoteke. Uporabite ga lahko namesto fseek(), če želite kazalec datoteke na začetku.

Sintaksa rewind()

  rewind   (  file_pointer  );>

Primer

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

>

>

Izhod

Geeks for Geeks>

Več funkcij za operacije datotek C

Naslednja tabela navaja še nekaj funkcij, ki jih je mogoče uporabiti za izvajanje operacij z datotekami ali pomoč pri njihovem izvajanju.

Funkcije Opis
fopen() Uporablja se za ustvarjanje datoteke ali za odpiranje datoteke.
fclose() Uporablja se za zapiranje datoteke.
fgets() Uporablja se za branje datoteke.
fprintf() Uporablja se za pisanje blokov podatkov v datoteko.
fscanf() Uporablja se za branje blokov podatkov iz datoteke.
getc() Uporablja se za branje enega znaka v datoteko.
putc() Uporablja se za pisanje enega znaka v datoteko.
fseek() Uporablja se za nastavitev položaja kazalca datoteke na omenjeno lokacijo.
ftell() Uporablja se za vrnitev trenutnega položaja kazalca datoteke.
previj nazaj() Uporablja se za nastavitev kazalca datoteke na začetek datoteke.
putw() Uporablja se za pisanje celega števila v datoteko.
getw() Uporablja se za branje celega števila iz datoteke.