logo

Tiedostojen käsittelyn perusteet C:ssä

Tiedoston luovutus C:ssä on prosessi, jossa luomme, avaamme, luemme, kirjoitamme ja suljemme tiedoston toimintoja. C-kieli tarjoaa erilaisia ​​toimintoja, kuten fopen(), fwrite(), fread(), fseek(), fprintf() jne. syötteiden, tulosteiden ja monien erilaisten C-tiedostotoimintojen suorittamiseen ohjelmassamme.

Miksi tarvitsemme tiedostojen käsittelyä C:ssä?

Toistaiseksi C-ohjelman toiminnot on tehty kehotteessa/päätteessä, jota ei ole tallennettu mihinkään. Tuloste poistetaan, kun ohjelma suljetaan. Mutta ohjelmistoteollisuudessa useimmat ohjelmat on kirjoitettu tallentamaan ohjelmasta haetut tiedot. Tiedostonkäsittelyn käyttö on juuri sitä, mitä tilanne vaatii.



minun elävä krikettini

Ymmärtääksemme, miksi tiedostojen käsittely on tärkeää, katsotaanpa muutamia tiedostojen käytön ominaisuuksia:

  • Uudelleenkäytettävyys: Tiedostoon tallennettuja tietoja voidaan käyttää, päivittää ja poistaa missä tahansa ja milloin tahansa, mikä takaa korkean uudelleenkäytettävyyden.
  • Siirrettävyys: Tiedostot voidaan siirtää toiseen ilman menettämättä tietoja tietokonejärjestelmässä. Virheellisen koodauksen riski on minimoitu tällä ominaisuudella.
  • Tehokas: Jotkin ohjelmat voivat vaatia suuren syöttömäärän. Tiedostonkäsittelyn avulla pääset helposti käsiksi tiedoston osaan muutamalla ohjeella, mikä säästää paljon aikaa ja vähentää virheiden mahdollisuutta.
  • Varastokapasiteetti: Tiedostojen avulla voit tallentaa suuren määrän tietoa ilman, että sinun tarvitsee huolehtia kaiken tallentamisesta samanaikaisesti ohjelmaan.

C:n tiedostotyypit

Tiedosto voidaan luokitella kahteen tyyppiin sen mukaan, miten tiedosto tallentaa tiedot. Ne ovat seuraavat:

  • Tekstitiedostot
  • Binääritiedostot



1. Tekstitiedostot

Tekstitiedosto sisältää tietoja ASCII-merkkien muodossa ja sitä käytetään yleensä merkkijonon tallentamiseen.

  • Jokainen tekstitiedoston rivi päättyy uuteen rivimerkkiin (' ').
  • Sen voi lukea tai kirjoittaa millä tahansa tekstieditorilla.
  • Yleensä niitä säilytetään .txt tiedostopääte.
  • Tekstitiedostoja voidaan käyttää myös lähdekoodin tallentamiseen.

2. Binääritiedostot

Binääritiedosto sisältää tietoja binäärimuoto (eli 0:t ja 1:t) ASCII-merkkien sijaan. Ne sisältävät dataa, joka on tallennettu samalla tavalla kuin se on tallennettu päämuistiin.

  • Binääritiedostoja voidaan luoda vain ohjelman sisältä ja vain ohjelma voi lukea niiden sisältöä.
  • Turvallisempia, koska ne eivät ole helposti luettavissa.
  • Yleensä niitä säilytetään .bin tiedostopääte.

C Tiedostotoiminnot

C-tiedostotoiminnot viittaavat erilaisiin mahdollisiin toimintoihin, joita voimme suorittaa tiedostolle C:ssä, kuten:



  1. Uuden tiedoston luominen – fopen(), jonka attribuutit ovat a tai a+ tai w tai w+
  2. Olemassa olevan tiedoston avaaminen - fopen()
  3. Lukeminen tiedostosta - fscanf() tai fgets()
  4. Kirjoittaminen tiedostoon - fprintf() tai fputs()
  5. Siirtyminen tiettyyn paikkaan tiedostossa – fseek() , kelaa taaksepäin ()
  6. Tiedoston sulkeminen - fclose()

Korostettu teksti mainitsee C-toiminnon, jota käytetään tiedostotoimintojen suorittamiseen.

Toiminnot C-tiedostooperaatioille

tiedostojen käsittely c

Tiedostoosoitin C:ssä

Tiedostoosoitin on viittaus tiettyyn paikkaan avatussa tiedostossa. Sitä käytetään tiedostojen käsittelyssä kaikkien tiedostotoimintojen suorittamiseen, kuten lukemiseen, kirjoittamiseen, sulkemiseen jne. Käytämme TIEDOSTO makro ilmoittaaksesi tiedoston osoitinmuuttujan. FILE-makro on määritelty sisällä otsikkotiedosto.

Tiedostoosoittimen syntaksi

  FILE*     pointer_name  ;>

Tiedostoosoitinta käytetään melkein kaikissa C:n tiedostooperaatioissa.

Avaa tiedosto C:ssä

Jos haluat avata tiedoston C:ssä, fopen() -toimintoa käytetään tiedostonimen tai tiedostopolun kanssa sekä tarvittavat käyttötavat.

Fopen() syntaksi

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

Parametrit

  • Tiedoston nimi : tiedoston nimi, kun se on samassa hakemistossa kuin lähdetiedosto. Muuten täysi polku.
  • access_mode: Määrittää, mitä toimintoa varten tiedosto avataan.

Palautusarvo

  • Jos tiedosto avataan onnistuneesti, palauttaa tiedostoosoittimen siihen.
  • Jos tiedostoa ei avata, palauttaa NULL-arvon.

Tiedoston avaustilat C:ssä

Tiedoston avaustilat tai käyttötavat määrittävät avattavalle tiedostolle sallitut toiminnot. Ne välitetään argumenttina fopen()-funktiolle. Jotkut yleisesti käytetyistä tiedostojen käyttötavoista on lueteltu alla:

Avaustilat Kuvaus
r Hakee tiedostoa. Jos tiedosto avataan onnistuneesti, fopen( ) lataa sen muistiin ja asettaa osoittimen, joka osoittaa sen ensimmäiseen merkkiin. Jos tiedostoa ei voi avata, fopen( ) palauttaa NULL-arvon.
rb Avaa lukemista varten binääritilassa. Jos tiedostoa ei ole olemassa, fopen( ) palauttaa NULL-arvon.
Sisään Avaa kirjoittamista varten tekstitilassa. Jos tiedosto on olemassa, sen sisältö korvataan. Jos tiedostoa ei ole olemassa, luodaan uusi tiedosto. Palauttaa NULL-arvon, jos tiedostoa ei voi avata.
wb Avaa kirjoittamista varten binääritilassa. Jos tiedosto on olemassa, sen sisältö korvataan. Jos tiedostoa ei ole olemassa, se luodaan.
a Hakee tiedostoa. Jos tiedosto avataan onnistuneesti, fopen( ) lataa sen muistiin ja asettaa osoittimen, joka osoittaa sen viimeiseen merkkiin. Se avautuu vain lisäystilassa. Jos tiedostoa ei ole olemassa, luodaan uusi tiedosto. Palauttaa NULL-arvon, jos tiedostoa ei voi avata.
ab Avaa liittämistä varten binääritilassa. Tiedot lisätään tiedoston loppuun. Jos tiedostoa ei ole olemassa, se luodaan.
r+ Hakee tiedostoa. Se avataan onnistuneesti fopen( ) lataa sen muistiin ja asettaa osoittimen, joka osoittaa sen ensimmäiseen merkkiin. Palauttaa NULL-arvon, jos tiedostoa ei voi avata.
rb+ Avoinna sekä lukemiseen että kirjoittamiseen binääritilassa. Jos tiedostoa ei ole olemassa, fopen( ) palauttaa NULL-arvon.
w+ Hakee tiedostoa. Jos tiedosto on olemassa, sen sisältö korvataan. Jos tiedostoa ei ole olemassa, luodaan uusi tiedosto. Palauttaa NULL-arvon, jos tiedostoa ei voi avata.
wb+ Avoinna sekä lukemiseen että kirjoittamiseen binääritilassa. Jos tiedosto on olemassa, sen sisältö korvataan. Jos tiedostoa ei ole olemassa, se luodaan.
a+ Hakee tiedostoa. Jos tiedosto avataan onnistuneesti, fopen( ) lataa sen muistiin ja asettaa osoittimen, joka osoittaa sen viimeiseen merkkiin. Se avaa tiedoston sekä luku- että lisäystilassa. Jos tiedostoa ei ole olemassa, luodaan uusi tiedosto. Palauttaa NULL-arvon, jos tiedostoa ei voi avata.
ab+ Avoinna sekä lukemista että liittämistä varten binääritilassa. Jos tiedostoa ei ole olemassa, se luodaan.

Kuten yllä on kerrottu, jos haluat suorittaa toimintoja binääritiedostolle, sinun on lisättävä 'b' viimeiseen. Esimerkiksi w:n sijasta täytyy käyttää wb:tä, a+:n sijaan a+b:tä.

Esimerkki tiedoston avaamisesta

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

>

>

Lähtö

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

Tiedostoa ei avata, koska sitä ei ole lähdehakemistossa. Mutta fopen()-funktio pystyy myös luomaan tiedoston, jos sitä ei ole olemassa. Se näkyy alla

Luo tiedosto C:ssä

Fopen()-funktio ei voi vain avata tiedostoa, vaan se voi myös luoda tiedoston, jos sitä ei vielä ole olemassa. Tätä varten meidän on käytettävä tiloja, jotka mahdollistavat tiedoston luomisen, jos sitä ei löydy, kuten w, w+, wb, wb+, a, a+, ab ja ab+.

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

Esimerkki tiedoston avaamisesta

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

>

>

Lähtö

The file is created Successfully.>

Lukeminen tiedostosta

Tiedoston lukutoiminto C:ssä voidaan suorittaa funktioilla fscanf() tai fgets(). Molemmat toiminnot suorittivat samat toiminnot kuin scanf ja gets, mutta lisäparametrilla, tiedostoosoittimella. On myös muita toimintoja, joita voimme käyttää tiedostosta lukemiseen. Tällaiset toiminnot on lueteltu alla:

Toiminto Kuvaus
fscanf() Käytä muotoiltua merkkijono- ja muuttujaargumenttiluetteloa syötteiden vastaanottamiseen tiedostosta.
fgets() Syötä koko rivi tiedostosta.
fgetc() Lukee yhden merkin tiedostosta.
saada() Lukee numeron tiedostosta.
fread() Lukee määritetyt tavut dataa binaaritiedostosta.

Joten, se riippuu sinusta, haluatko lukea tiedoston rivi riviltä vai merkki merkiltä.

Esimerkki:

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

Getc() ja jotkut muut tiedostonlukufunktiot palauttavat EOF:n (End Of File), kun ne saavuttavat tiedoston loppuun lukemisen aikana. EOF ilmaisee tiedoston lopun ja sen arvo on toteutuksen määrittelemä.

Huomautus: Tässä on huomioitava se, että tiedoston tietyn osan lukemisen jälkeen tiedostoosoitin siirretään automaattisesti viimeksi luetun merkin loppuun.

Kirjoita tiedostoon

Tiedoston kirjoitustoiminnot voidaan suorittaa funktioilla fprintf() ja fputs(), joilla on yhtäläisyyksiä lukutoimintojen kanssa. C-ohjelmointi tarjoaa myös joitain muita toimintoja, joita voidaan käyttää tietojen kirjoittamiseen tiedostoon, kuten:

Toiminto Kuvaus
fprintf() Kuten printf(), tämä funktio käyttää muotoiltua merkkijonoa ja muuttujaargumenttiluetteloa tulostaakseen tulosteen tiedostoon.
fputs() Tulostaa koko tiedoston rivin ja rivinvaihdon loppuun.
fputc() Tulostaa tiedostoon yhden merkin.
fputw() Tulostaa numeron tiedostoon.
fwrite() Tämä toiminto kirjoittaa määritetyn määrän tavuja binaaritiedostoon.

Esimerkki:

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

Tiedoston sulkeminen

Fclose()-funktiota käytetään tiedoston sulkemiseen. Onnistuneiden tiedostotoimintojen jälkeen sinun on aina suljettava tiedosto poistaaksesi sen muistista.

fclose() syntaksi

  fclose  (  file_pointer  );>

missä tiedosto_osoitin on osoitin avautuvaan tiedostoon.

Esimerkki:

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

Esimerkkejä tiedostojen luovuttamisesta C

Esimerkki 1: Ohjelma luo tiedoston, kirjoita siihen ja sulje tiedosto

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

>

happamat ominaisuudet

>

Lähtö

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

Tämä ohjelma luo GfgTest.c-nimisen tiedoston samaan hakemistoon kuin lähdetiedosto, joka sisältää seuraavan tekstin: techcodeview.com-A Computer Science Portal for Geeks.

Esimerkki 2: Ohjelma avaa tiedoston, lue siitä ja sulje tiedosto

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

>

>

Lähtö

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

Tämä ohjelma lukee tekstin edellisessä esimerkissä luomastamme tiedostosta nimeltä GfgTest.c ja tulostaa sen konsoliin.

Lue ja kirjoita binaaritiedostoon

Tähän mennessä olemme keskustelleet vain tekstitiedostojen toiminnoista. Binääritiedoston toiminnot ovat samanlaisia ​​kuin tekstitiedostooperaatiot, mutta niillä on vain vähän eroa.

Binaaritiedoston avaaminen

Tiedoston avaamiseksi binääritilassa käytämme rb, rb+, ab, ab+, wb ja wb+ käyttötilaa fopen()-funktiossa. Käytämme myös .bin-tiedostotunnistetta binääritiedoston nimessä.

Esimerkki

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

Kirjoita binaaritiedostoon

Käytämme fwrite()-funktiota tietojen kirjoittamiseen binääritiedostoon. Tiedot kirjoitetaan binääritiedostoon bittien (0 ja 1) muodossa.

fwrite() syntaksi

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

Parametrit:

  • ptr: osoitin kirjoitettavaan muistilohkoon.
  • koko: kunkin kirjoitettavan elementin koko (tavuina).
  • nmemb: elementtien määrä.
  • tiedosto_osoitin : FILE-osoitin tulostustiedostovirtaan.

Palautusarvo:

  • Kirjoitettujen objektien lukumäärä.

Esimerkki: Ohjelma kirjoittaa binaaritiedostoon käyttämällä 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;> }>

>

>

Lähtö

Write Operation Successful>

Lukeminen binaaritiedostosta

Fread()-funktiolla voidaan lukea tietoja C:n binääritiedostosta. Data luetaan tiedostosta samassa muodossa kuin se on tallennettu eli binäärimuodossa.

sanan fread() syntaksi

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

Parametrit:

  • ptr: osoitin luettavaan muistilohkoon.
  • koko: kunkin luettavan elementin koko (tavuina).
  • nmemb: elementtien määrä.
  • tiedosto_osoitin : FILE-osoitin syöttötiedostovirtaan.

Palautusarvo:

  • Kirjoitettujen objektien lukumäärä.

Esimerkki: Ohjelma lukea binääritiedostosta käyttämällä 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;> }>

>

>

Lähtö

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() C:ssä

Jos tiedostossa on useita tietueita ja meidän on käytettävä tiettyä tietuetta, joka on tietyssä paikassa, meidän on selattava kaikkia tietueita ennen sitä saadaksemme tietueen. Tämän tekeminen tuhlaa paljon muistia ja käyttöaikaa. Muistin kulutuksen ja käyttöajan vähentämiseksi voimme käyttää fseek() joka tarjoaa helpon tavan päästä tarvittaviin tietoihin. fseek()-funktio C:ssä etsii kohdistimen tiedostossa annettuun tietueeseen.

fseek() syntaksi

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

Esimerkki fseek()

C




kuinka koulu keksittiin
// 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;> }>

>

>

Lähtö

81>

rewind() C:ssä

The kelaa taaksepäin () -toimintoa käytetään tuomaan tiedostoosoitin tiedoston alkuun. Sitä voidaan käyttää fseek():n sijasta, kun haluat tiedoston osoittimen alkuun.

Rewind() syntaksi

  rewind   (  file_pointer  );>

Esimerkki

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

>

>

Lähtö

Geeks for Geeks>

Lisää toimintoja C-tiedostotoimintoihin

Seuraavassa taulukossa on lueteltu muita toimintoja, joita voidaan käyttää tiedostotoimintojen suorittamiseen tai niiden suorittamiseen.

Toiminnot Kuvaus
fopen() Sitä käytetään tiedoston luomiseen tai tiedoston avaamiseen.
fclose() Sitä käytetään tiedoston sulkemiseen.
fgets() Sitä käytetään tiedoston lukemiseen.
fprintf() Sitä käytetään tietolohkojen kirjoittamiseen tiedostoon.
fscanf() Sitä käytetään datalohkojen lukemiseen tiedostosta.
getc() Sitä käytetään yhden merkin lukemiseen tiedostoon.
putc() Sitä käytetään yhden merkin kirjoittamiseen tiedostoon.
fseek() Sitä käytetään asettamaan tiedostoosoittimen sijainti mainittuun paikkaan.
ftell() Sitä käytetään palauttamaan tiedostoosoittimen nykyinen sijainti.
kelaa taaksepäin () Sitä käytetään asettamaan tiedostoosoitin tiedoston alkuun.
putw() Sitä käytetään kokonaisluvun kirjoittamiseen tiedostoon.
getw() Sitä käytetään kokonaisluvun lukemiseen tiedostosta.