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:
- Jauna faila izveide - fopen() ar atribūtiem a vai a+ vai w vai w+
- Esoša faila atvēršana - fopen ()
- Lasīšana no faila - fscanf() vai fgets()
- Rakstīšana failā - fprintf() vai fputs()
- Pārvietošanās uz noteiktu vietu failā – fseek() , attīt ()
- 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 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. |