logo

Elementele de bază ale manipulării fișierelor în C

Predarea fișierelor în C este procesul prin care creăm, deschidem, citim, scriem și închidem operațiuni pe un fișier. Limbajul C oferă diferite funcții, cum ar fi fopen(), fwrite(), fread(), fseek(), fprintf(), etc. pentru a efectua intrare, ieșire și multe operații diferite de fișier C în programul nostru.

c++ int la șir

De ce avem nevoie de gestionarea fișierelor în C?

Până acum operațiunile folosind programul C se fac pe un prompt/terminal care nu este stocat nicăieri. Ieșirea este ștearsă când programul este închis. Dar în industria software-ului, majoritatea programelor sunt scrise pentru a stoca informațiile preluate din program. Utilizarea gestionării fișierelor este exact ceea ce necesită situația.



Pentru a înțelege de ce este importantă gestionarea fișierelor, să ne uităm la câteva caracteristici ale utilizării fișierelor:

  • Reutilizabilitate: Datele stocate în fișier pot fi accesate, actualizate și șterse oriunde și oricând, oferind o reutilizare ridicată.
  • Portabilitate: Fără a pierde date, fișierele pot fi transferate către altul în sistemul informatic. Riscul de codare defectuoasă este minimizat cu această caracteristică.
  • Eficient: Poate fi necesară o cantitate mare de intrare pentru unele programe. Gestionarea fișierelor vă permite să accesați cu ușurință o parte a unui fișier folosind câteva instrucțiuni, ceea ce economisește mult timp și reduce șansa de erori.
  • Capacitate de stocare: Fișierele vă permit să stocați o cantitate mare de date fără să vă faceți griji cu privire la stocarea simultană a totul într-un program.

Tipuri de fișiere în C

Un fișier poate fi clasificat în două tipuri în funcție de modul în care fișierul stochează datele. Acestea sunt după cum urmează:

  • Fișiere text
  • Fișiere binare



1. Fișiere text

Un fișier text conține date în forma de caractere ASCII și este în general folosit pentru a stoca un flux de caractere.

  • Fiecare linie dintr-un fișier text se termină cu un nou caracter de linie (‘ ’).
  • Poate fi citit sau scris de orice editor de text.
  • Ele sunt în general depozitate cu .TXT extensia de fișier.
  • Fișierele text pot fi folosite și pentru a stoca codul sursă.

2. Fișiere binare

Un fișier binar conține date în formă binară (adică 0 și 1) în loc de caractere ASCII. Acestea conțin date care sunt stocate într-un mod similar cu modul în care sunt stocate în memoria principală.

  • Fișierele binare pot fi create numai din cadrul unui program, iar conținutul lor poate fi citit doar de un program.
  • Mai sigure, deoarece nu sunt ușor de citit.
  • Ele sunt în general depozitate cu .cos extensia de fișier.

C Operațiuni cu fișiere

Operațiile cu fișierul C se referă la diferitele operațiuni posibile pe care le putem efectua asupra unui fișier în C, cum ar fi:



  1. Crearea unui nou fișier - fopen() cu atribute ca a sau a+ sau w sau w+
  2. Deschiderea unui fișier existent - fopen()
  3. Citirea din fișier - fscanf() sau fgets()
  4. Scrierea într-un fișier - fprintf() sau fputs()
  5. Mutarea într-o locație specifică dintr-un fișier – fseek() , înapoi()
  6. Închiderea unui fișier - fclose()

Textul evidențiat menționează funcția C folosită pentru a efectua operațiunile cu fișierul.

Funcții pentru operații cu fișierele C

manipularea fișierelor în c

File Pointer în C

Un indicator de fișier este o referință la o anumită poziție din fișierul deschis. Este folosit în manipularea fișierelor pentru a efectua toate operațiunile de fișiere, cum ar fi citire, scriere, închidere etc. Folosim FIŞIER macro pentru a declara variabila indicator de fișier. Macrocomanda FILE este definită în interior fișier antet.

Sintaxa File Pointer

  FILE*     pointer_name  ;>

File Pointer este folosit în aproape toate operațiunile cu fișiere din C.

Deschideți un fișier în C

Pentru deschiderea unui fișier în C, aplicația fopen() funcția este utilizată cu numele fișierului sau calea fișierului împreună cu modurile de acces necesare.

Sintaxa lui fopen()

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

Parametrii

  • nume de fișier : numele fișierului atunci când este prezent în același director cu fișierul sursă. În rest, drum complet.
  • access_mode: Specifică pentru ce operație este deschis fișierul.

Valoare returnată

  • Dacă fișierul este deschis cu succes, returnează un pointer de fișier către el.
  • Dacă fișierul nu este deschis, atunci returnează NULL.

Moduri de deschidere a fișierelor în C

Modurile de deschidere a fișierelor sau modurile de acces specifică operațiunile permise asupra fișierului care urmează să fie deschis. Ele sunt transmise ca argument la funcția fopen(). Unele dintre modurile de acces la fișiere utilizate în mod obișnuit sunt enumerate mai jos:

Moduri de deschidere Descriere
r Caută fișier. Dacă fișierul este deschis cu succes, fopen( ) îl încarcă în memorie și setează un pointer care indică primul caracter din el. Dacă fișierul nu poate fi deschis, fopen( ) returnează NULL.
rb Deschis pentru citire în modul binar. Dacă fișierul nu există, fopen( ) returnează NULL.
În Deschis pentru scriere în modul text. Dacă fișierul există, conținutul său este suprascris. Dacă fișierul nu există, este creat un fișier nou. Returnează NULL, dacă nu se poate deschide fișierul.
wb Deschis pentru scriere în modul binar. Dacă fișierul există, conținutul său este suprascris. Dacă fișierul nu există, acesta va fi creat.
A Caută fișier. Dacă fișierul este deschis cu succes, fopen( ) îl încarcă în memorie și setează un pointer care indică ultimul caracter din el. Se deschide numai în modul de adăugare. Dacă fișierul nu există, este creat un fișier nou. Returnează NULL, dacă nu se poate deschide fișierul.
ab Deschideți pentru adăugare în modul binar. Datele sunt adăugate la sfârșitul fișierului. Dacă fișierul nu există, acesta va fi creat.
r+ Caută fișier. Este deschis cu succes fopen( ) îl încarcă în memorie și setează un pointer care indică primul caracter din el. Returnează NULL, dacă nu se poate deschide fișierul.
rb+ Deschis atât pentru citire, cât și pentru scriere în modul binar. Dacă fișierul nu există, fopen( ) returnează NULL.
w+ Caută fișier. Dacă fișierul există, conținutul său este suprascris. Dacă fișierul nu există, se creează un fișier nou. Returnează NULL, dacă nu se poate deschide fișierul.
wb+ Deschis atât pentru citire, cât și pentru scriere în modul binar. Dacă fișierul există, conținutul său este suprascris. Dacă fișierul nu există, acesta va fi creat.
a+ Caută fișier. Dacă fișierul este deschis cu succes, fopen( ) îl încarcă în memorie și setează un pointer care indică ultimul caracter din el. Deschide fișierul atât în ​​modul de citire, cât și în modul de adăugare. Dacă fișierul nu există, este creat un fișier nou. Returnează NULL, dacă nu se poate deschide fișierul.
ab+ Deschis atât pentru citire, cât și pentru adăugare în modul binar. Dacă fișierul nu există, acesta va fi creat.

După cum este menționat mai sus, dacă doriți să efectuați operații pe un fișier binar, atunci trebuie să adăugați „b” la sfârșit. De exemplu, în loc de w, trebuie să folosiți wb, în ​​loc de a+ trebuie să folosiți a+b.

Exemplu de deschidere a unui fișier

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

>

>

Ieșire

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

Fișierul nu este deschis deoarece nu există în directorul sursă. Dar funcția fopen() este, de asemenea, capabilă să creeze un fișier dacă acesta nu există. Este prezentat mai jos

Creați un fișier în C

Funcția fopen() nu numai că poate deschide un fișier, ci și poate crea un fișier dacă acesta nu există deja. Pentru asta, trebuie să folosim modurile care permit crearea unui fișier dacă nu este găsit, cum ar fi w, w+, wb, wb+, a, a+, ab și ab+.

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

Exemplu de deschidere a unui fișier

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

>

>

Ieșire

The file is created Successfully.>

Citirea dintr-un fișier

Operația de citire a fișierului în C poate fi efectuată folosind funcțiile fscanf() sau fgets(). Ambele funcții au efectuat aceleași operații ca și scanf și obține, dar cu un parametru suplimentar, pointerul fișierului. Există și alte funcții pe care le putem folosi pentru a citi dintr-un fișier. Astfel de funcții sunt enumerate mai jos:

Funcţie Descriere
fscanf() Utilizați șiruri formatate și lista de argumente variabile pentru a prelua intrarea dintr-un fișier.
fgets() Introduceți întreaga linie din fișier.
fgetc() Citește un singur caracter din fișier.
obține() Citește un număr dintr-un fișier.
friad() Citește octeții de date specificati dintr-un fișier binar.

Deci, depinde de tine dacă vrei să citești fișierul linie cu linie sau caracter cu caracter.

Exemplu:

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

Getc() și alte funcții de citire a fișierelor returnează EOF (Sfârșitul fișierului) când ajung la sfârșitul fișierului în timpul citirii. EOF indică sfârșitul fișierului și valoarea acestuia este definită de implementare.

Notă: Un lucru de remarcat aici este că, după citirea unei anumite părți a fișierului, indicatorul fișierului va fi mutat automat la sfârșitul ultimului caracter citit.

Scrieți într-un fișier

Operațiile de scriere a fișierelor pot fi efectuate de funcțiile fprintf() și fputs() cu similarități cu operațiile de citire. Programarea C oferă și alte funcții care pot fi folosite pentru a scrie date într-un fișier, cum ar fi:

Funcţie Descriere
fprintf() Similar cu printf(), această funcție folosește șiruri formatate și lista de argumente variabile pentru a imprima rezultatul în fișier.
fputs() Tipărește întreaga linie în fișier și o nouă linie la sfârșit.
fputc() Imprimă un singur caracter în fișier.
fputw() Imprimă un număr în fișier.
fwrite() Această funcție scrie cantitatea specificată de octeți în fișierul binar.

Exemplu:

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

Închiderea unui fișier

Funcția fclose() este folosită pentru a închide fișierul. După operațiuni cu succes cu fișierul, trebuie să închideți întotdeauna un fișier pentru a-l elimina din memorie.

Sintaxa lui fclose()

  fclose  (  file_pointer  );>

unde file_pointer este indicatorul către fișierul deschis.

Exemplu:

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

Exemple de predare a fișierelor în C

Exemplul 1: Program pentru a crea un fișier, a scrie în el și a închide fișierul

C




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

>

tutorial de microservicii
>

Ieșire

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

Acest program va crea un fișier numit GfgTest.c în același director cu fișierul sursă, care va conține următorul text: techcodeview.com-A Computer Science Portal for Geeks.

Exemplul 2: Program pentru a deschide un fișier, a citi din el și a închide fișierul

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

>

>

Ieșire

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

Acest program citește textul din fișierul numit GfgTest.c pe care l-am creat în exemplul anterior și îl imprimă în consolă.

Citiți și scrieți într-un fișier binar

Până acum, am discutat doar despre operațiunile cu fișierele text. Operațiile pe un fișier binar sunt similare cu operațiunile cu fișiere text, cu o mică diferență.

Deschiderea unui fișier binar

Pentru a deschide un fișier în modul binar, folosim modul de acces rb, rb+, ab, ab+, wb și wb+ în funcția fopen(). De asemenea, folosim extensia de fișier .bin în numele fișierului binar.

Exemplu

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

Scrieți într-un fișier binar

Folosim funcția fwrite() pentru a scrie date într-un fișier binar. Datele sunt scrise în fișierul binar în de la biți (0 și 1).

Sintaxa lui fwrite()

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

Parametri:

  • ptr: pointer către blocul de memorie care urmează să fie scris.
  • mărimea: dimensiunea fiecărui element de scris (în octeți).
  • nmemb: număr de elemente.
  • file_pointer : FILE pointer către fluxul de fișiere de ieșire.

Valoare returnată:

  • Numărul de obiecte scrise.

Exemplu: Program pentru a scrie într-un fișier binar folosind 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;> }>

unghi ascutit

>

>

Ieșire

Write Operation Successful>

Citirea din fișierul binar

Funcția fread() poate fi folosită pentru a citi date dintr-un fișier binar în C. Datele sunt citite din fișier în aceeași formă în care sunt stocate, adică în formă binară.

Sintaxa lui fread()

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

Parametri:

  • ptr: pointer către blocul de memorie de citit.
  • mărimea: dimensiunea fiecărui element de citit (în octeți).
  • nmemb: număr de elemente.
  • file_pointer : FILE pointer către fluxul fișierului de intrare.

Valoare returnată:

  • Numărul de obiecte scrise.

Exemplu: Program pentru a citi dintr-un fișier binar folosind 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;> }>

>

>

Ieșire

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() în C

Dacă avem mai multe înregistrări în interiorul unui fișier și trebuie să accesăm o anumită înregistrare care se află într-o anumită poziție, deci trebuie să parcurgem toate înregistrările înainte de acesta pentru a obține înregistrarea. Făcând acest lucru va irosi multă memorie și timp operațional. Pentru a reduce consumul de memorie și timpul de funcționare putem folosi fseek() care oferă o modalitate mai simplă de a ajunge la datele necesare. Funcția fseek() în C caută cursorul către înregistrarea dată din fișier.

Sintaxă pentru fseek()

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

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

>

>

Ieșire

81>

rewind() în C

The derulează înapoi() funcția este utilizată pentru a aduce pointerul fișierului la începutul fișierului. Poate fi folosit în locul fseek() atunci când doriți ca indicatorul fișierului să fie la început.

Sintaxa lui rewind()

  rewind   (  file_pointer  );>

Exemplu

C


exemple dfa



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

>

>

Ieșire

Geeks for Geeks>

Mai multe funcții pentru operațiuni cu fișierele C

Următorul tabel listează mai multe funcții care pot fi utilizate pentru a efectua operațiuni cu fișiere sau pentru a ajuta la efectuarea acestora.

Funcții Descriere
fopen() Este folosit pentru a crea un fișier sau pentru a deschide un fișier.
fclose() Este folosit pentru a închide un fișier.
fgets() Este folosit pentru a citi un fișier.
fprintf() Este folosit pentru a scrie blocuri de date într-un fișier.
fscanf() Este folosit pentru a citi blocuri de date dintr-un fișier.
getc() Este folosit pentru a citi un singur caracter într-un fișier.
putc() Este folosit pentru a scrie un singur caracter într-un fișier.
fseek() Este folosit pentru a seta poziția unui pointer de fișier la o locație menționată.
ftell() Este folosit pentru a returna poziția curentă a unui pointer de fișier.
derulează înapoi() Este folosit pentru a seta indicatorul de fișier la începutul unui fișier.
putw() Este folosit pentru a scrie un întreg într-un fișier.
getw() Este folosit pentru a citi un întreg dintr-un fișier.