Filaflevering C er den proces, hvor vi opretter, åbner, læser, skriver og lukker handlinger på en fil. C-sproget giver forskellige funktioner såsom fopen(), fwrite(), fread(), fseek(), fprintf() osv. til at udføre input, output og mange forskellige C-filoperationer i vores program.
Hvorfor har vi brug for filhåndtering i C?
Indtil videre er operationerne ved hjælp af C-programmet udført på en prompt/terminal, som ikke er gemt nogen steder. Udgangen slettes, når programmet lukkes. Men i softwareindustrien er de fleste programmer skrevet til at gemme de oplysninger, der hentes fra programmet. Brugen af filhåndtering er præcis, hvad situationen kræver.
For at forstå hvorfor filhåndtering er vigtig, lad os se på nogle få funktioner ved brug af filer:
- Genanvendelighed: De data, der er gemt i filen, kan tilgås, opdateres og slettes hvor som helst og når som helst, hvilket giver høj genanvendelighed.
- Portabilitet: Uden at miste nogen data kan filer overføres til en anden i computersystemet. Risikoen for mangelfuld kodning minimeres med denne funktion.
- Effektiv: En stor mængde input kan være påkrævet for nogle programmer. Filhåndtering giver dig mulighed for nemt at få adgang til en del af en fil ved hjælp af få instruktioner, hvilket sparer en masse tid og reducerer risikoen for fejl.
- Lagerkapacitet: Filer giver dig mulighed for at gemme en stor mængde data uden at skulle bekymre dig om at gemme alt samtidigt i et program.
Filtyper i C
En fil kan klassificeres i to typer baseret på den måde, filen gemmer dataene på. De er som følger:
- Tekstfiler
- Binære filer
1. Tekstfiler
En tekstfil indeholder data i form af ASCII-tegn og bruges generelt til at gemme en strøm af tegn.
- Hver linje i en tekstfil slutter med et nyt linjetegn (' ').
- Den kan læses eller skrives af enhver teksteditor.
- De opbevares generelt med .txt filtypenavn.
- Tekstfiler kan også bruges til at gemme kildekoden.
2. Binære filer
En binær fil indeholder data i binær form (dvs. 0'er og 1'er) i stedet for ASCII-tegn. De indeholder data, der er gemt på samme måde, som det er gemt i hovedhukommelsen.
forskel mellem array og arraylist
- De binære filer kan kun oprettes fra et program, og deres indhold kan kun læses af et program.
- Mere sikre, da de ikke er letlæselige.
- De opbevares generelt med .beholder filtypenavn.
C Filhandlinger
C-filoperationer refererer til de forskellige mulige operationer, som vi kan udføre på en fil i C, såsom:
- Oprettelse af en ny fil – fopen() med attributter som a eller a+ eller w eller w+
- Åbning af en eksisterende fil – fopen()
- Læser fra fil – fscanf() eller fgets()
- Skrivning til en fil – fprintf() eller fputs()
- Flytning til en bestemt placering i en fil – fseek() , spole tilbage ()
- Lukning af en fil – fclose()
Den fremhævede tekst nævner C-funktionen, der bruges til at udføre filhandlingerne.
Funktioner til C-filoperationer

Filmarkør i C
En filmarkør er en reference til en bestemt position i den åbnede fil. Det bruges i filhåndtering til at udføre alle filhandlinger såsom læse, skrive, lukke osv. Vi bruger FIL makro for at erklære filpegevariablen. FIL-makroen er defineret inde header-fil.
Syntaks for File Pointer
FILE* pointer_name ;>
File Pointer bruges i næsten alle filoperationer i C.
Åbn en fil i C
For at åbne en fil i C, fopen() funktionen bruges med filnavnet eller filstien sammen med de nødvendige adgangstilstande.
Syntaks for fopen()
FILE* fopen (const char * file_name , const char * access_mode );>
Parametre
- filnavn : navnet på filen, når den findes i samme mappe som kildefilen. Ellers fuld vej.
- adgangstilstand: Angiver, for hvilken handling filen åbnes.
Returværdi
- Hvis filen åbnes korrekt, returnerer en filmarkør til den.
- Hvis filen ikke åbnes, returneres NULL.
Filåbningstilstande i C
Filåbningstilstande eller adgangstilstande angiver de tilladte handlinger på den fil, der skal åbnes. De sendes som et argument til fopen()-funktionen. Nogle af de almindeligt anvendte filadgangstilstande er angivet nedenfor:
| Åbningstilstande | Beskrivelse |
|---|---|
| r | Søger fil. Hvis filen åbnes med succes, indlæser fopen( ) den i hukommelsen og opsætter en markør, der peger på det første tegn i den. Hvis filen ikke kan åbnes, returnerer fopen( ) NULL. |
| rb | Åben for læsning i binær tilstand. Hvis filen ikke eksisterer, returnerer fopen( ) NULL. |
| I | Åben for skrivning i teksttilstand. Hvis filen eksisterer, overskrives dens indhold. Hvis filen ikke eksisterer, oprettes en ny fil. Returnerer NULL, hvis filen ikke kan åbnes. |
| wb | Åben for skrivning i binær tilstand. Hvis filen eksisterer, overskrives dens indhold. Hvis filen ikke findes, oprettes den. |
| -en | Søger fil. Hvis filen åbnes med succes, indlæser fopen( ) den i hukommelsen og opsætter en markør, der peger på det sidste tegn i den. Den åbner kun i tilføjelsestilstand. Hvis filen ikke eksisterer, oprettes en ny fil. Returnerer NULL, hvis filen ikke kan åbnes. |
| ab | Åbn for tilføjelse i binær tilstand. Data tilføjes til slutningen af filen. Hvis filen ikke findes, oprettes den. |
| r+ | Søger fil. Den er åbnet med succes fopen( ) indlæser den i hukommelsen og sætter en markør op, der peger på det første tegn i den. Returnerer NULL, hvis filen ikke kan åbnes. |
| rb+ | Åben for både læsning og skrivning i binær tilstand. Hvis filen ikke eksisterer, returnerer fopen( ) NULL. |
| w+ | Søger fil. Hvis filen eksisterer, overskrives dens indhold. Hvis filen ikke eksisterer, oprettes en ny fil. Returnerer NULL, hvis filen ikke kan åbnes. |
| wb+ | Åben for både læsning og skrivning i binær tilstand. Hvis filen eksisterer, overskrives dens indhold. Hvis filen ikke findes, oprettes den. |
| a+ | Søger fil. Hvis filen åbnes med succes, indlæser fopen( ) den i hukommelsen og opsætter en markør, der peger på det sidste tegn i den. Det åbner filen i både læse- og tilføjelsestilstand. Hvis filen ikke eksisterer, oprettes en ny fil. Returnerer NULL, hvis filen ikke kan åbnes. |
| ab+ | Åben for både læsning og tilføjelse i binær tilstand. Hvis filen ikke findes, oprettes den. |
Som angivet ovenfor, hvis du vil udføre operationer på en binær fil, skal du til sidst tilføje 'b'. For eksempel, i stedet for w skal du bruge wb, i stedet for a+ skal du bruge a+b.
Eksempel på åbning af en fil
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;> }> |
>
>Produktion
The file is not opened. The program will now exit.>
Filen er ikke åbnet, fordi den ikke findes i kildemappen. Men funktionen fopen() er også i stand til at oprette en fil, hvis den ikke eksisterer. Det er vist nedenfor
Opret en fil i C
Funktionen fopen() kan ikke kun åbne en fil, men kan også oprette en fil, hvis den ikke allerede eksisterer. Til det skal vi bruge de tilstande, der tillader oprettelse af en fil, hvis den ikke findes, såsom w, w+, wb, wb+, a, a+, ab og ab+.
FILE *fptr; fptr = fopen (' filename.txt ', ' w ');> Eksempel på åbning af en fil
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;> }> |
>
>Produktion
The file is created Successfully.>
Læsning fra en fil
Fillæseoperationen i C kan udføres ved hjælp af funktionerne fscanf() eller fgets(). Begge funktioner udførte de samme operationer som scanf and gets, men med en ekstra parameter, filmarkøren. Der er også andre funktioner, vi kan bruge til at læse fra en fil. Sådanne funktioner er anført nedenfor:
| Fungere | Beskrivelse |
|---|---|
| fscanf() | Brug formateret streng og liste med variable argumenter til at tage input fra en fil. |
| fgets() | Indtast hele linjen fra filen. |
| fgetc() | Læser et enkelt tegn fra filen. |
| få() | Læser et tal fra en fil. |
| fread() | Læser de angivne bytes af data fra en binær fil. |
Så det afhænger af dig, om du vil læse filen linje for linje eller tegn for tegn.
Eksempel:
FILE * fptr; fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>
Getc() og nogle andre fillæsningsfunktioner returnerer EOF (End Of File), når de når slutningen af filen under læsning. EOF angiver slutningen af filen, og dens værdi er implementeringsdefineret.
Bemærk: En ting at bemærke her er, at efter at have læst en bestemt del af filen, vil filmarkøren automatisk blive flyttet til slutningen af det sidst læste tegn.
Skriv til en fil
Filskriveoperationerne kan udføres af funktionerne fprintf() og fputs() med ligheder med læseoperationer. C-programmering giver også nogle andre funktioner, der kan bruges til at skrive data til en fil, såsom:
| Fungere | Beskrivelse |
|---|---|
| fprintf() | I lighed med printf() bruger denne funktion formateret streng og liste med variable argumenter til at udskrive output til filen. |
| fputs() | Udskriver hele linjen i filen og en ny linje til sidst. |
| fputc() | Udskriver et enkelt tegn i filen. |
| fputw() | Udskriver et nummer til filen. |
| fwrite() | Denne funktion skriver det angivne antal bytes til den binære fil. |
Eksempel:
FILE *fptr ; fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);> Lukning af en fil
Funktionen fclose() bruges til at lukke filen. Efter vellykkede filhandlinger skal du altid lukke en fil for at fjerne den fra hukommelsen.
Syntaks for fclose()
fclose ( file_pointer );>
hvor er file_pointer er markøren til den åbnede fil.
Eksempel:
FILE *fptr ; fptr= fopen(fileName.txt, w); ---------- Some file Operations ------- fclose(fptr);>
Eksempler på filaflevering C
Eksempel 1: Program til at oprette en fil, skrive i den og lukke filen
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;> }> |
>
>Produktion
The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>
Dette program vil oprette en fil med navnet GfgTest.c i samme mappe som kildefilen, som vil indeholde følgende tekst: techcodeview.com-A Computer Science Portal for Geeks.
Eksempel 2: Program til at åbne en fil, læse fra den og lukke filen
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;> }> |
>
>
Produktion
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.>
Dette program læser teksten fra filen med navnet GfgTest.c, som vi oprettede i det foregående eksempel, og udskriver den i konsollen.
Læs og skriv i en binær fil
Indtil nu har vi kun diskuteret tekstfiloperationer. Operationerne på en binær fil ligner tekstfiloperationer med ringe forskel.
Åbning af en binær fil
For at åbne en fil i binær tilstand bruger vi adgangstilstanden rb, rb+, ab, ab+, wb og wb+ i fopen()-funktionen. Vi bruger også filtypen .bin i det binære filnavn.
Eksempel
fptr = fopen('filename.bin', 'rb');> Skriv til en binær fil
Vi bruger fwrite()-funktionen til at skrive data til en binær fil. Dataene skrives til den binære fil i fra-bits (0'er og 1'er).
Syntaks for fwrite()
size_t fwrite (const void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametre:
- ptr: markør til den hukommelsesblok, der skal skrives.
- størrelse: størrelsen af hvert element, der skal skrives (i bytes).
- nmember: antal elementer.
- file_pointer : FILE-peger til outputfilstrømmen.
Returneringsværdi:
- Antal skrevet genstande.
Eksempel: Program til at skrive til en binær fil ved hjælp af 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;> }> |
>
>Produktion
Write Operation Successful>
Læsning fra binær fil
Fread()-funktionen kan bruges til at læse data fra en binær fil i C. Dataene læses fra filen i samme form, som den er gemt, dvs. binær form.
Syntaks for fread()
size_t fread (void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametre:
- ptr: markøren til den hukommelsesblok, der skal læses.
- størrelse: størrelsen af hvert element, der skal læses (i bytes).
- nmember: antal elementer.
- file_pointer : FILE-peger til inputfilstrømmen.
Returneringsværdi:
- Antal skrevet genstande.
Eksempel: Program til at læse fra en binær fil ved hjælp af 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;> }> |
>
>
Produktion
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() i C
Hvis vi har flere poster inde i en fil og har brug for at få adgang til en bestemt post, der er på en bestemt position, så skal vi gennemgå alle posterne før den for at få posten. At gøre dette vil spilde en masse hukommelse og driftstid. For at reducere hukommelsesforbrug og driftstid kan vi bruge fseek() hvilket giver en nemmere måde at komme til de nødvendige data. fseek()-funktionen i C søger markøren til den givne post i filen.
Syntaks for fseek()
int fseek(FILE *ptr, long int offset, int pos);>
Eksempel på 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;> }> |
>
>
hvordan man fjerner det første tegn i excel
Produktion
81>
rewind() i C
Det spole tilbage() funktionen bruges til at bringe filmarkøren til begyndelsen af filen. Den kan bruges i stedet for fseek(), når du vil have filmarkøren i starten.
Syntaks for rewind()
rewind ( file_pointer );>
Eksempel
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;> }> |
>
>Produktion
Geeks for Geeks>
Flere funktioner til C-filoperationer
Følgende tabel viser nogle flere funktioner, der kan bruges til at udføre filhandlinger eller hjælpe med at udføre dem.
| Funktioner | Beskrivelse |
|---|---|
| fopen() | Det bruges til at oprette en fil eller til at åbne en fil. |
| fclose() | Det bruges til at lukke en fil. |
| fgets() | Det bruges til at læse en fil. |
| fprintf() | Det bruges til at skrive blokke af data ind i en fil. |
| fscanf() | Det bruges til at læse blokke af data fra en fil. |
| getc() | Det bruges til at læse et enkelt tegn til en fil. |
| putc() | Det bruges til at skrive et enkelt tegn til en fil. |
| fseek() | Den bruges til at indstille positionen af en filmarkør til en nævnt placering. |
| ftell() | Den bruges til at returnere den aktuelle position for en filmarkør. |
| spole tilbage() | Den bruges til at sætte filmarkøren til begyndelsen af en fil. |
| putw() | Det bruges til at skrive et heltal til en fil. |
| getw() | Det bruges til at læse et heltal fra en fil. |