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:
- Uuden tiedoston luominen – fopen(), jonka attribuutit ovat a tai a+ tai w tai w+
- Olemassa olevan tiedoston avaaminen - fopen()
- Lukeminen tiedostosta - fscanf() tai fgets()
- Kirjoittaminen tiedostoon - fprintf() tai fputs()
- Siirtyminen tiettyyn paikkaan tiedostossa – fseek() , kelaa taaksepäin ()
- Tiedoston sulkeminen - fclose()
Korostettu teksti mainitsee C-toiminnon, jota käytetään tiedostotoimintojen suorittamiseen.
Toiminnot C-tiedostooperaatioille

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