logo

Failu apstrādes pamati C

Failu nodošana C ir process, kurā mēs izveidojam, atveram, lasām, rakstām un aizveram darbības ar failu. C valoda nodrošina dažādas funkcijas, piemēram, fopen(), fwrite(), fread(), fseek(), fprintf() utt., lai mūsu programmā veiktu ievadi, izvadi un daudzas dažādas C faila darbības.

Kāpēc mums ir nepieciešama failu apstrāde programmā C?

Līdz šim darbības, izmantojot programmu C, tiek veiktas uz uzvednes/termināļa, kas nekur nav saglabāts. Izvade tiek dzēsta, kad programma tiek aizvērta. Taču programmatūras nozarē lielākā daļa programmu ir rakstītas, lai saglabātu no programmas iegūto informāciju. Failu apstrādes izmantošana ir tieši tas, ko prasa situācija.



Lai saprastu, kāpēc failu apstrāde ir svarīga, apskatīsim dažas failu izmantošanas iespējas:

  • Atkārtoti lietojama: Datnē saglabātajiem datiem var piekļūt, tos atjaunināt un dzēst jebkurā vietā un laikā, nodrošinot augstu atkārtotas izmantošanas iespējas.
  • Pārnesamība: Nezaudējot datus, failus var pārsūtīt uz citu datorsistēmā. Izmantojot šo līdzekli, tiek samazināts kļūdainas kodēšanas risks.
  • Efektīvs: Dažām programmām var būt nepieciešams liels ievades apjoms. Failu apstrāde ļauj viegli piekļūt faila daļai, izmantojot dažus norādījumus, kas ietaupa daudz laika un samazina kļūdu iespējamību.
  • Noliktavas ietilpība: Faili ļauj saglabāt lielu datu apjomu, neuztraucoties par visu vienlaikus saglabāšanu programmā.

Failu veidi C

Failu var iedalīt divos veidos, pamatojoties uz veidu, kā fails glabā datus. Tie ir šādi:

  • Teksta faili
  • Binārie faili



1. Teksta faili

Teksta failā ir ietverti dati ASCII rakstzīmju forma un parasti tiek izmantots rakstzīmju straumes glabāšanai.

  • Katra teksta faila rindiņa beidzas ar jaunu rindas rakstzīmi (' ').
  • To var lasīt vai rakstīt ar jebkuru teksta redaktoru.
  • Tos parasti uzglabā ar .txt faila paplašinājums.
  • Teksta failus var izmantot arī avota koda saglabāšanai.

2. Binārie faili

Binārais fails satur datus binārā forma (t.i., 0 un 1) ASCII rakstzīmju vietā. Tie satur datus, kas tiek glabāti līdzīgi tam, kā tie tiek glabāti galvenajā atmiņā.

  • Bināros failus var izveidot tikai programmā, un to saturu var nolasīt tikai programma.
  • Drošāki, jo tie nav viegli lasāmi.
  • Tos parasti uzglabā ar .bin faila paplašinājums.

C Failu darbības

C faila darbības attiecas uz dažādām iespējamām operācijām, kuras mēs varam veikt ar failu C, piemēram:



  1. Jauna faila izveide - fopen() ar atribūtiem a vai a+ vai w vai w+
  2. Esoša faila atvēršana - fopen ()
  3. Lasīšana no faila - fscanf() vai fgets()
  4. Rakstīšana failā - fprintf() vai fputs()
  5. Pārvietošanās uz noteiktu vietu failā – fseek() , attīt ()
  6. Faila aizvēršana - fclose()

Izceltajā tekstā ir minēta C funkcija, ko izmanto faila darbību veikšanai.

Funkcijas C failu operācijām

failu apstrāde c

Failu rādītājs C

Faila rādītājs ir atsauce uz noteiktu pozīciju atvērtajā failā. To izmanto failu apstrādē, lai veiktu visas failu darbības, piemēram, lasīšanu, rakstīšanu, aizvēršanu utt. Mēs izmantojam FILE makro, lai deklarētu faila rādītāja mainīgo. Makro FILE ir definēts iekšā galvenes fails.

Failu rādītāja sintakse

  FILE*     pointer_name  ;>

Failu rādītājs tiek izmantots gandrīz visās failu operācijās programmā C.

Atveriet failu programmā C

Lai atvērtu failu programmā C, fopen () funkcija tiek izmantota ar faila nosaukumu vai faila ceļu kopā ar nepieciešamajiem piekļuves režīmiem.

Fopen() sintakse

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

Parametri

  • faila nosaukums : faila nosaukums, ja tas atrodas tajā pašā direktorijā, kur avota fails. Citādi pilns ceļš.
  • access_mode: Norāda, kādai darbībai fails tiek atvērts.

Atdeves vērtība

  • Ja fails ir veiksmīgi atvērts, atgriež uz to faila rādītāju.
  • Ja fails netiek atvērts, atgriež NULL.

Failu atvēršanas režīmi C

Failu atvēršanas režīmi vai piekļuves režīmi norāda atļautās darbības ar atveramo failu. Tie tiek nodoti kā arguments funkcijai fopen (). Tālāk ir norādīti daži no visbiežāk izmantotajiem failu piekļuves režīmiem.

Atvēršanas režīmi Apraksts
r Meklē failu. Ja fails ir veiksmīgi atvērts, fopen( ) ielādē to atmiņā un iestata rādītāju, kas norāda uz tā pirmo rakstzīmi. Ja failu nevar atvērt, fopen( ) atgriež NULL.
rb Atvērts lasīšanai binārajā režīmā. Ja fails neeksistē, fopen( ) atgriež NULL.
In Atvērts rakstīšanai teksta režīmā. Ja fails pastāv, tā saturs tiek pārrakstīts. Ja fails neeksistē, tiek izveidots jauns fails. Atgriež NULL, ja nevar atvērt failu.
wb Atvērts rakstīšanai binārajā režīmā. Ja fails pastāv, tā saturs tiek pārrakstīts. Ja fails neeksistē, tas tiks izveidots.
a Meklē failu. Ja fails ir veiksmīgi atvērts, fopen( ) ielādē to atmiņā un iestata rādītāju, kas norāda uz pēdējo tā rakstzīmi. Tas tiek atvērts tikai pievienošanas režīmā. Ja fails neeksistē, tiek izveidots jauns fails. Atgriež NULL, ja nevar atvērt failu.
ab Atvērts pievienošanai binārajā režīmā. Dati tiek pievienoti faila beigās. Ja fails neeksistē, tas tiks izveidots.
r+ Meklē failu. Tas tiek veiksmīgi atvērts, fopen( ) ielādē to atmiņā un iestata rādītāju, kas norāda uz pirmo rakstzīmi tajā. Atgriež NULL, ja nevar atvērt failu.
rb+ Atvērts gan lasīšanai, gan rakstīšanai binārajā režīmā. Ja fails neeksistē, fopen( ) atgriež NULL.
w+ Meklē failu. Ja fails pastāv, tā saturs tiek pārrakstīts. Ja fails neeksistē, tiek izveidots jauns fails. Atgriež NULL, ja nevar atvērt failu.
wb+ Atvērts gan lasīšanai, gan rakstīšanai binārajā režīmā. Ja fails pastāv, tā saturs tiek pārrakstīts. Ja fails neeksistē, tas tiks izveidots.
a+ Meklē failu. Ja fails ir veiksmīgi atvērts, fopen( ) ielādē to atmiņā un iestata rādītāju, kas norāda uz pēdējo tā rakstzīmi. Tas atver failu gan lasīšanas, gan pievienošanas režīmā. Ja fails neeksistē, tiek izveidots jauns fails. Atgriež NULL, ja nevar atvērt failu.
ab+ Atvērts gan lasīšanai, gan pievienošanai binārajā režīmā. Ja fails neeksistē, tas tiks izveidots.

Kā norādīts iepriekš, ja vēlaties veikt darbības ar bināro failu, jums ir jāpievieno “b” beigās. Piemēram, w vietā ir jālieto wb, a+ vietā jālieto a+b.

Faila atvēršanas piemērs

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

>

>

Izvade

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

Fails netiek atvērts, jo tas neeksistē avota direktorijā. Bet funkcija fopen () var arī izveidot failu, ja tas neeksistē. Tas ir parādīts zemāk

Izveidojiet failu programmā C

Funkcija fopen () var ne tikai atvērt failu, bet arī izveidot failu, ja tas vēl nepastāv. Šim nolūkam mums ir jāizmanto režīmi, kas ļauj izveidot failu, ja tas nav atrasts, piemēram, w, w+, wb, wb+, a, a+, ab un ab+.

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

Faila atvēršanas piemērs

C

pamatjosla pret platjoslu




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

>

>

Izvade

The file is created Successfully.>

Lasīšana no faila

Failu lasīšanas operāciju programmā C var veikt, izmantojot funkcijas fscanf() vai fgets(). Abas funkcijas veica tādas pašas darbības kā scanf un iegūst, bet ar papildu parametru, faila rādītāju. Ir arī citas funkcijas, ko varam izmantot, lai nolasītu no faila. Šādas funkcijas ir uzskaitītas zemāk:

Funkcija Apraksts
fscanf() Izmantojiet formatētu virkņu un mainīgo argumentu sarakstu, lai iegūtu ievadi no faila.
fgets() Ievadiet visu rindiņu no faila.
fgetc() Nolasa vienu rakstzīmi no faila.
gūt() Nolasa skaitli no faila.
fread () Nolasa norādītos datu baitus no binārā faila.

Tātad, tas ir atkarīgs no jums, vai vēlaties lasīt failu pēc rindiņas vai rakstzīmes pēc rakstzīmes.

Piemērs:

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

Getc () un dažas citas failu lasīšanas funkcijas atgriež EOF (Faila beigas), kad tās lasīšanas laikā sasniedz faila beigas. EOF norāda faila beigas, un tā vērtību nosaka ieviešana.

Piezīme: Viena lieta, kas jāņem vērā, ir tāda, ka pēc noteiktas faila daļas lasīšanas faila rādītājs tiks automātiski pārvietots uz pēdējās lasītās rakstzīmes beigām.

Rakstīt failā

Failu rakstīšanas darbības var veikt, izmantojot funkcijas fprintf () un fputs () ar līdzībām lasīšanas darbībām. C programmēšana nodrošina arī dažas citas funkcijas, ko var izmantot, lai ierakstītu datus failā, piemēram:

Funkcija Apraksts
fprintf() Līdzīgi kā printf(), šī funkcija izmanto formatētu virkni un mainīgo argumentu sarakstu, lai izdrukātu izvadi failā.
fputs () Izdrukā visu faila rindiņu un jaunu rindiņu beigās.
fputc() Failā izdrukā vienu rakstzīmi.
fputw() Izdrukā failam numuru.
fwrite() Šī funkcija ieraksta norādīto baitu daudzumu binārajā failā.

Piemērs:

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

Faila aizvēršana

Funkcija fclose() tiek izmantota, lai aizvērtu failu. Pēc veiksmīgām faila darbībām vienmēr ir jāaizver fails, lai to noņemtu no atmiņas.

Fclose() sintakse

  fclose  (  file_pointer  );>

kur faila_rādītājs ir rādītājs uz atvērto failu.

Piemērs:

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

Failu nodošanas piemēri C

1. piemērs: Programma, lai izveidotu failu, ierakstītu tajā un aizvērtu failu

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

>

c# vārdnīca

>

Izvade

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

Šī programma izveidos failu ar nosaukumu GfgTest.c tajā pašā direktorijā kā avota fails, kurā būs šāds teksts: techcodeview.com-Datorzinātņu portāls Geeks.

2. piemērs: Programma faila atvēršanai, lasīšanai no tā un faila aizvēršanai

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

>

>

Izvade

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

Šī programma nolasa tekstu no faila ar nosaukumu GfgTest.c, kuru izveidojām iepriekšējā piemērā, un izdrukā to konsolē.

Lasiet un rakstiet binārajā failā

Līdz šim mēs esam apsprieduši tikai teksta failu darbības. Darbības ar bināro failu ir līdzīgas teksta faila operācijām ar nelielām atšķirībām.

Binārā faila atvēršana

Lai atvērtu failu binārajā režīmā, funkcijā fopen () mēs izmantojam piekļuves režīmu rb, rb+, ab, ab+, wb un wb+. Mēs arī izmantojam .bin faila paplašinājumu binārajā faila nosaukumā.

Piemērs

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

Rakstiet binārajā failā

Mēs izmantojam fwrite() funkciju, lai rakstītu datus binārā failā. Dati tiek ierakstīti binārajā failā no bitiem (0 un 1).

Fwrite() sintakse

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

Parametri:

  • ptr: norādiet uz ierakstāmo atmiņas bloku.
  • Izmērs: katra rakstāmā elementa lielums (baitos).
  • nmemb: elementu skaits.
  • faila_rādītājs : FILE rādītājs uz izvades faila straumi.

Atgriešanas vērtība:

  • Uzrakstīto objektu skaits.

Piemērs: Programma rakstīšanai binārajā failā, izmantojot 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;> }>

>

cilpas veidi
>

Izvade

Write Operation Successful>

Lasīšana no binārā faila

Funkciju fread() var izmantot, lai nolasītu datus no bināra faila C valodā. Dati tiek nolasīti no faila tādā pašā formā, kādā tie tiek saglabāti, t.i., binārā formā.

Fread() sintakse

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

Parametri:

  • ptr: norādiet uz lasāmo atmiņas bloku.
  • Izmērs: katra nolasāmā elementa lielums (baitos).
  • nmemb: elementu skaits.
  • faila_rādītājs : FILE rādītājs uz ievades faila straumi.

Atgriešanas vērtība:

  • Uzrakstīto objektu skaits.

Piemērs: Programma lasīšanai no bināra faila, izmantojot 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;> }>

>

>

Izvade

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 () valodā C

Ja failā ir vairāki ieraksti un mums ir jāpiekļūst konkrētam ierakstam, kas atrodas noteiktā vietā, mums ir jāpārskata visi ieraksti pirms tā, lai iegūtu ierakstu. To darot, tiks tērēta daudz atmiņas un darbības laika. Lai samazinātu atmiņas patēriņu un darbības laiku, mēs varam izmantot fseek() kas nodrošina vienkāršāku veidu, kā piekļūt nepieciešamajiem datiem. fseek() funkcija programmā C meklē kursoru uz doto ierakstu failā.

Sintakse fseek()

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

fseek() piemērs

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

>

>

Izvade

81>

rewind () valodā C

The attīt () funkcija tiek izmantota, lai faila rādītāju novirzītu uz faila sākumu. To var izmantot fseek() vietā, ja vēlaties faila rādītāju sākumā.

Attīšanas () sintakse

  rewind   (  file_pointer  );>

Piemērs

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

>

>

Izvade

Geeks for Geeks>

Vairāk funkciju C failu operācijām

Nākamajā tabulā ir uzskaitītas vēl dažas funkcijas, kuras var izmantot failu operāciju veikšanai vai to veikšanai.

Funkcijas Apraksts
fopen () To izmanto, lai izveidotu failu vai atvērtu failu.
fclose() To izmanto, lai aizvērtu failu.
fgets() To izmanto, lai lasītu failu.
fprintf() To izmanto, lai ierakstītu datu blokus failā.
fscanf() To izmanto, lai nolasītu datu blokus no faila.
getc() To izmanto, lai failā nolasītu vienu rakstzīmi.
putc() To izmanto, lai failā ierakstītu vienu rakstzīmi.
fseek() To izmanto, lai iestatītu faila rādītāja pozīciju uz minēto vietu.
ftell() To izmanto, lai atgrieztu faila rādītāja pašreizējo pozīciju.
attīt () To izmanto, lai iestatītu faila rādītāju uz faila sākumu.
putw() To izmanto, lai failā ierakstītu veselu skaitli.
getw () To izmanto, lai no faila nolasītu veselu skaitli.