Filinlämning C är den process där vi skapar, öppnar, läser, skriver och stänger operationer på en fil. C-språket tillhandahåller olika funktioner såsom fopen(), fwrite(), fread(), fseek(), fprintf(), etc. för att utföra inmatning, utmatning och många olika C-filoperationer i vårt program.
Varför behöver vi filhantering i C?
Hittills görs operationerna med C-programmet på en prompt/terminal som inte finns lagrad någonstans. Utgången raderas när programmet stängs. Men inom mjukvaruindustrin är de flesta program skrivna för att lagra informationen som hämtas från programmet. Användningen av filhantering är precis vad situationen kräver.
För att förstå varför filhantering är viktig, låt oss titta på några funktioner för att använda filer:
- Återanvändbarhet: Data som lagras i filen kan nås, uppdateras och raderas var som helst och när som helst vilket ger hög återanvändbarhet.
- Portabilitet: Utan att förlora någon data kan filer överföras till en annan i datorsystemet. Risken för felaktig kodning minimeras med denna funktion.
- Effektiv: En stor mängd input kan krävas för vissa program. Filhantering gör att du enkelt kan komma åt en del av en fil med få instruktioner vilket sparar mycket tid och minskar risken för fel.
- Lagringskapacitet: Filer låter dig lagra en stor mängd data utan att behöva oroa dig för att lagra allt samtidigt i ett program.
Filtyper i C
En fil kan klassificeras i två typer baserat på hur filen lagrar data. De är följande:
- Textfiler
- Binära filer
1. Textfiler
En textfil innehåller data i form av ASCII-tecken och används vanligtvis för att lagra en ström av tecken.
- Varje rad i en textfil slutar med ett nytt radtecken (' ').
- Den kan läsas eller skrivas av vilken textredigerare som helst.
- De förvaras i allmänhet med .Text filtillägget.
- Textfiler kan också användas för att lagra källkoden.
2. Binära filer
En binär fil innehåller data i binär form (dvs. 0:or och 1:or) istället för ASCII-tecken. De innehåller data som lagras på ett liknande sätt som det lagras i huvudminnet.
- De binära filerna kan endast skapas från ett program och deras innehåll kan endast läsas av ett program.
- Säkrare eftersom de inte är lättlästa.
- De förvaras i allmänhet med .bin filtillägg.
C Filoperationer
C-filoperationer hänvisar till de olika möjliga operationerna som vi kan utföra på en fil i C som:
- Skapa en ny fil – fopen() med attribut som a eller a+ eller w eller w+
- Öppna en befintlig fil – fopen()
- Läser från fil – fscanf() eller fgets()
- Skriva till en fil – fprintf() eller fputs()
- Flytta till en specifik plats i en fil – fseek() , spola tillbaka()
- Stänga en fil – fclose()
Den markerade texten nämner C-funktionen som används för att utföra filoperationerna.
Funktioner för C-filoperationer

Filpekare i C
En filpekare är en referens till en viss position i den öppnade filen. Den används i filhantering för att utföra alla filoperationer som att läsa, skriva, stänga, etc. Vi använder FIL makro för att deklarera filpekarvariabeln. Makrot FILE definieras inuti header-fil.
Syntax för filpekare
FILE* pointer_name ;>
File Pointer används i nästan alla filoperationer i C.
Öppna en fil i C
För att öppna en fil i C, fopen() funktionen används med filnamnet eller sökvägen tillsammans med de nödvändiga åtkomstlägena.
Syntax för fopen()
FILE* fopen (const char * file_name , const char * access_mode );>
Parametrar
- filnamn : namnet på filen när den finns i samma katalog som källfilen. Annars full väg.
- access_mode: Anger för vilken operation filen öppnas.
Returvärde
- Om filen öppnas framgångsrikt returneras en filpekare till den.
- Om filen inte öppnas returneras NULL.
Filöppningslägen i C
Filöppningslägen eller åtkomstlägen anger tillåtna operationer på filen som ska öppnas. De skickas som ett argument till fopen()-funktionen. Några av de vanligaste filåtkomstlägena listas nedan:
| Öppningslägen | Beskrivning |
|---|---|
| r | Söker i filen. Om filen öppnas framgångsrikt läser fopen( ) in den i minnet och sätter upp en pekare som pekar på det första tecknet i den. Om filen inte kan öppnas returnerar fopen( ) NULL. |
| rb | Öppen för läsning i binärt läge. Om filen inte finns returnerar fopen( ) NULL. |
| I | Öppen för att skriva i textläge. Om filen finns skrivs dess innehåll över. Om filen inte finns skapas en ny fil. Returnerar NULL, om det inte går att öppna filen. |
| wb | Öppen för skrivning i binärt läge. Om filen finns skrivs dess innehåll över. Om filen inte finns skapas den. |
| a | Söker i filen. Om filen öppnas framgångsrikt läser fopen( ) in den i minnet och sätter upp en pekare som pekar på det sista tecknet i den. Den öppnas endast i tilläggsläget. Om filen inte finns skapas en ny fil. Returnerar NULL, om det inte går att öppna filen. |
| ab | Öppna för att lägga till i binärt läge. Data läggs till i slutet av filen. Om filen inte finns skapas den. |
| r+ | Söker i filen. Den öppnas framgångsrikt fopen( ) laddar den i minnet och sätter upp en pekare som pekar på det första tecknet i den. Returnerar NULL, om det inte går att öppna filen. |
| rb+ | Öppen för både läsning och skrivning i binärt läge. Om filen inte finns returnerar fopen( ) NULL. |
| w+ | Söker i filen. Om filen finns skrivs dess innehåll över. Om filen inte finns skapas en ny fil. Returnerar NULL, om det inte går att öppna filen. |
| wb+ | Öppen för både läsning och skrivning i binärt läge. Om filen finns skrivs dess innehåll över. Om filen inte finns skapas den. |
| a+ | Söker i filen. Om filen öppnas framgångsrikt läser fopen( ) in den i minnet och sätter upp en pekare som pekar på det sista tecknet i den. Den öppnar filen i både läs- och tilläggsläge. Om filen inte finns skapas en ny fil. Returnerar NULL, om det inte går att öppna filen. |
| ab+ | Öppen för både läsning och tillägg i binärt läge. Om filen inte finns skapas den. |
Som anges ovan, om du vill utföra operationer på en binär fil, måste du lägga till 'b' till sist. Till exempel, istället för w måste du använda wb, istället för a+ måste du använda a+b.
Exempel på att öppna 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 öppnas inte eftersom den inte finns i källkatalogen. Men funktionen fopen() kan också skapa en fil om den inte finns. Det visas nedan
Skapa en fil i C
Funktionen fopen() kan inte bara öppna en fil utan kan också skapa en fil om den inte redan finns. För det måste vi använda de lägen som tillåter skapandet av en fil om den inte hittas som w, w+, wb, wb+, a, a+, ab och ab+.
FILE *fptr; fptr = fopen (' filename.txt ', ' w ');> Exempel på att öppna en fil
C
js global variabel
// 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äsa från en fil
Filläsoperationen i C kan utföras med funktionerna fscanf() eller fgets(). Båda funktionerna utförde samma operationer som scanf och gets men med en extra parameter, filpekaren. Det finns även andra funktioner vi kan använda för att läsa från en fil. Sådana funktioner listas nedan:
| Fungera | Beskrivning |
|---|---|
| fscanf() | Använd formaterad sträng och lista med variabelargument för att ta indata från en fil. |
| fgets() | Mata in hela raden från filen. |
| fgetc() | Läser ett enstaka tecken från filen. |
| skaffa sig() | Läser ett nummer från en fil. |
| fread() | Läser de angivna byten med data från en binär fil. |
Så det beror på dig om du vill läsa filen rad för rad eller tecken för tecken.
Exempel:
FILE * fptr; fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>
Getc() och några andra filläsningsfunktioner returnerar EOF (End Of File) när de når slutet av filen under läsning. EOF indikerar slutet på filen och dess värde är implementeringsdefinierat.
Notera: En sak att notera här är att efter att ha läst en viss del av filen kommer filpekaren automatiskt att flyttas till slutet av det senast lästa tecknet.
Skriv till en fil
Filskrivoperationerna kan utföras av funktionerna fprintf() och fputs() med likheter med läsoperationer. C-programmering tillhandahåller även några andra funktioner som kan användas för att skriva data till en fil som:
| Fungera | Beskrivning |
|---|---|
| fprintf() | På samma sätt som printf(), använder den här funktionen formaterad sträng och lista med variabelargument för att skriva ut utdata till filen. |
| fputs() | Skriver ut hela raden i filen och en ny rad i slutet. |
| fputc() | Skriver ut ett enda tecken i filen. |
| fputw() | Skriver ut ett nummer till filen. |
| fwrite() | Denna funktion skriver det angivna antalet byte till den binära filen. |
Exempel:
FILE *fptr ; fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);> Stänga en fil
Funktionen fclose() används för att stänga filen. Efter framgångsrika filoperationer måste du alltid stänga en fil för att ta bort den från minnet.
Syntax för fclose()
fclose ( file_pointer );>
där den file_pointer är pekaren till den öppnade filen.
Exempel:
FILE *fptr ; fptr= fopen(fileName.txt, w); ---------- Some file Operations ------- fclose(fptr);>
Exempel på filinlämning i C
Exempel 1: Program för att skapa en fil, skriva i den och stänga 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.>
Detta program kommer att skapa en fil med namnet GfgTest.c i samma katalog som källfilen som kommer att innehålla följande text: techcodeview.com-A Computer Science Portal for Geeks.
Exempel 2: Program för att öppna en fil, läsa från den och stänga 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.>
Det här programmet läser texten från filen GfgTest.c som vi skapade i föregående exempel och skriver ut den i konsolen.
Läs och skriv i en binär fil
Hittills har vi bara diskuterat textfiloperationer. Operationerna på en binär fil liknar textfiloperationer med liten skillnad.
Öppna en binär fil
För att öppna en fil i binärt läge använder vi åtkomstläget rb, rb+, ab, ab+, wb och wb+ i fopen()-funktionen. Vi använder också filtillägget .bin i det binära filnamnet.
Exempel
fptr = fopen('filename.bin', 'rb');> Skriv till en binär fil
Vi använder funktionen fwrite() för att skriva data till en binär fil. Data skrivs till den binära filen i bitarnas från (0:or och 1:or).
Syntax för fwrite()
size_t fwrite (const void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametrar:
- ptr: pekare till minnesblocket som ska skrivas.
- storlek: storleken på varje element som ska skrivas (i byte).
- nmemb: antal element.
- file_pointer : FILE-pekare till utdatafilströmmen.
Returvärde:
- Antal skrivna objekt.
Exempel: Program för att skriva till en binär fil med 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äser från binär fil
Fread()-funktionen kan användas för att läsa data från en binär fil i C. Datan läses från filen i samma form som den lagras, dvs binär form.
Syntax för fread()
size_t fread (void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametrar:
- ptr: pekaren till minnesblocket att läsa.
- storlek: storleken på varje element som ska läsas (i byte).
- nmemb: antal element.
- file_pointer : FILpekare till indatafilströmmen.
Returvärde:
- Antal skrivna objekt.
Exempel: Program för att läsa från en binär fil med 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
Om vi har flera poster i en fil och behöver komma åt en viss post som är på en specifik position, så måste vi gå igenom alla poster innan den för att få posten. Att göra detta kommer att slösa mycket minne och drifttid. För att minska minnesförbrukningen och drifttiden kan vi använda fseek() vilket ger ett enklare sätt att komma till den information som krävs. fseek()-funktionen i C söker markören till den givna posten i filen.
Syntax för fseek()
int fseek(FILE *ptr, long int offset, int pos);>
Exempel 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;> }> |
>
>
Produktion
81>
rewind() i C
De spola tillbaka() funktionen används för att föra filpekaren till början av filen. Den kan användas i stället för fseek() när du vill ha filpekaren i början.
Syntax för rewind()
rewind ( file_pointer );>
Exempel
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>
Fler funktioner för C-filoperationer
Följande tabell listar ytterligare några funktioner som kan användas för att utföra filoperationer eller hjälpa till att utföra dem.
| Funktioner | Beskrivning |
|---|---|
| fopen() | Den används för att skapa en fil eller för att öppna en fil. |
| fclose() | Den används för att stänga en fil. |
| fgets() | Den används för att läsa en fil. |
| fprintf() | Den används för att skriva datablock till en fil. |
| fscanf() | Den används för att läsa datablock från en fil. |
| getc() | Den används för att läsa ett enstaka tecken till en fil. |
| putc() | Den används för att skriva ett enda tecken till en fil. |
| fseek() | Den används för att ställa in positionen för en filpekare till en nämnd plats. |
| ftell() | Den används för att returnera den aktuella positionen för en filpekare. |
| spola tillbaka() | Den används för att ställa in filpekaren till början av en fil. |
| putw() | Det används för att skriva ett heltal till en fil. |
| getw() | Den används för att läsa ett heltal från en fil. |