
Sometime it is necessary to store the output in a file for permanent storage instead of just displaying it. In C Language, this can be done with the help of file handling.
Using file handling we can do the following operations on a file.
There are many functions in C library which is use to open, read, write, search and close a file. A list of file functions is given below:
| S.No. | Function | Syntax | Description |
|---|---|---|---|
| fopen() | filepointer=fopen("filename.ext","mode"); | Open a file | |
| fclose() | fclose(filepointer); | Close a file | |
| fputc() | fputc(char variable, filepointer); | Write a character in a file. | |
| fgetc() | char ch=fgetc (filepointer); | Read a single character from a file at a time. | |
| fputs() | fputs(string, filepointer); | Write a string in a file. | |
| fgets() | fgets(string, numberofcharacters, filepointer); | Read a string from a file. | |
| fprintf() | fprintf (filepointer,"%s %d", e.name, e.age); | Write a record in a file. | |
| fscanf() | fscanf( fp, "%s %d", &e.name, &e.age); | Read a record from a file. | |
| fwrite() | fwrite(&object, sizeof(object), 1, fp); | Write a record in a file | |
| fread() | fread(&object, sizeof(object), 1, fp); | Read a record from a file | |
| fseek() | fseek (fp, -recsize, SEEK_CUR); | Search a record SEEK_END, SEEK_CUR, SEEK_SET | |
| ftell() | ftell(filepointer); | To locate the current position | |
| remove() | remove("filename.txt"); | To delete a file | |
| rename() | rename("Oldfilename","Newfilename"); | Rename the file | |
| rewind() | rewind(filepointer); | Sets the file pointer to the beginning of the file | |
| feof() | !feof(fp) or if (fp==NULL) | To locate end of file. |
File handling modes tells the compiler what action to be perfom on the file eg read, write, append etc. File handling modes are listed below:
| S.No. | Modes | Description |
|---|---|---|
| r | Opens an existing text file for reading purpose. | |
| w | Creates a new text file for writing purpose. If file already exists, then it open the file and overwrite it. | |
| a | Open a text file for writing in append mode, if it does not exist then a new file is created. | |
| r+ | Opens a text file for reading and writing both. | |
| w+ | Opens a text file for reading and writing both. It first truncate the file to zero length. | |
| a+ | Opens a text file for reading and writing both. It creates the file if it does not exist. The reading will start from the beginning but writing can only be appended. |
| S.No. | Modes | Description |
|---|---|---|
| rb | Open a binary file in read mode | |
| wb | Open a binary file in write mode | |
| ab | Open a binary file in append mode | |
| rb+ | Open a binary file in read and write mode | |
| wb+ | Open a binary file in read and write mode | |
| ab+ | Open a binary file in read and write mode |
fputc() function: Use to write a single character into a file.
Example 1: WAP to input a character and write in a file.
#include<stdio.h>
#include<conio.h>
void main()
{
char a;
FILE *fp;
clrscr();
fp = fopen("file.txt","w");
printf("Enter character: ");
a = getchar();
fputc(a,fp);
fclose(fp);
}
/* Use while loop to write a string in the file. '\r' is use for carriage return.*/
while(a!='\r')
{
a = getche();
fputc(a,f);
}
Example 2: WAP to Input a character and append in a file.
#include<stdio.h>
#include<conio.h>
void main()
{
char a;
FILE *fp;
clrscr();
fp = fopen("file.txt","a");
printf("Enter character");
a = getchar();
fputc(a,fp);
fclose(fp);
}
fgetc() function: Use to read a single character from a file.
Example 3.1: WAP to read a character from a file.
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char ch;
clrscr();
fp=fopen("file.txt","r");
ch = fgetc(fp);
printf("%c",ch);
close(fp);
getch();
}
Example 3.2: WAP to read all characters from a file using loop.
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char ch;
clrscr();
fp=fopen("file.txt","r");
while((ch=fgetc(fp))!=EOF)
{
printf("%c",ch);
}
close(fp);
getch();
}
fputs() function: Write a line of characters into a file.
Example 4.1: WAP to write a string in a file.
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
clrscr();
fp=fopen("file.txt","w");
fputs("Hello fgets - fputs example",fp);
fclose(fp);
}
Example 4.2: WAP to input a string and write in a file.
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char ch[80];
clrscr();
fp=fopen("file.txt","a");
printf("Enter sentance:");
gets(ch);
fputs(ch, fp);
fclose(fp);
}
fgets() function: Read a line of characters from the file.
Example 5: fgets function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char text[80];
clrscr();
fp=fopen("file.txt","r");
printf("%s",fgets(text,80,fp));
fclose(fp);
getch();
}
fprintf() function: Use to write set of characters into the file.
Example 6: fprintf() function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
clrscr();
fp = fopen("file.txt", "w");
fprintf(fp, "Hello fprintf example.");
fclose(fp);
getch();
}
fscanf() function: Use to read set of characters from the file. It reads a word from file and returns EOF at the end of file.
Example 7: fscanf() function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char text[255];
clrscr();
fp = fopen("file.txt", "r");
while(fscanf(fp, "%s", text)!=EOF)
{
printf("%s ", text);
}
fclose(fp);
getch();
}
Example 8: Store employee information as entered by user. Store employee id, name, salary and display it.
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fptr;
int id;
char name[30];
float salary;
clrscr();
fptr = fopen("emp.txt", "w+");
if (fptr == NULL)
{
printf("File does not exists \n");
return;
}
printf("Enter the id: ");
scanf("%d", &id);
fprintf(fptr, "Id= %d\n", id);
printf("Enter the name: ");
scanf("%s", name);
fprintf(fptr, "Name= %s\n", name);
printf("Enter the salary: ");
scanf("%f", &salary);
fprintf(fptr, "Salary= %.2f\n", salary);
fclose(fptr);
getch();
}
fseek() function: Use to set the file pointer to the specified offset. It is used to write data into file at desired location.
There are 3 constants used in the fseek() function: SEEK_SET, SEEK_CUR and SEEK_END.
Example 9: fseek() function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
clrscr();
fp = fopen("file.txt","w+");
fputs("This is fseek function", fp);
fseek( fp, 7, SEEK_SET);
fputs("replaced text", fp);
fclose(fp);
getch();
}
C rewind() function: Sets the file pointer at the beginning of the stream. It is useful if you have to use stream many times.
Example 10: rewind() function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char c;
clrscr();
fp=fopen("file.txt","r");
while((c=fgetc(fp))!=EOF)
{
printf("%c",c);
}
rewind(fp);//moves the file pointer at beginning of the file
while((c=fgetc(fp))!=EOF)
{
printf("%c",c);
}
fclose(fp);
getch();
}
As you can see, rewind() function moves the file pointer at beginning of the file that is why "this is simple text" is printed 2 times. If you don't call rewind() function, "this is simple text" will be printed only once.
ftell() function: returns the current file position of the specified stream. We can use ftell() function to get the total size of a file after moving file pointer at the end of file.
Example 11: ftell() function
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
int length;
clrscr();
fp = fopen("file.txt", "r");
fseek(fp, 0, SEEK_END);
length = ftell(fp);
fclose(fp);
printf("Size of file: %d bytes", length);
getch();
}
fread(), fwrite() function: use to read and write a record in a data file
Example 12: fread(), fwrite() function
#include<stdio.h>
#include<conio.h>
struct student
{
int rollno;
char name[20];
};
void main()
{
struct student st, st2;
clrscr();
printf("Enter Rollno and Name:");
fflush(stdin);
scanf("%d",&st.rollno);
fflush(stdin);
gets(st.name);
FILE *fp;
fp=fopen("record.dat", "a");
fwrite(&st, sizeof(st), 1, fp);
fclose(fp);
fp=fopen("record.dat", "r");
//fread(&st2, sizeof(st2), 1, fp); //read a single record
while(fread(&st2, sizeof(st2), 1, fp))
{
printf("\nRollno = %d", st2.rollno);
printf("\nName= %s", st2.name);
}
fclose(fp);
getch();
}
rename() function: Use to rename a file. You can use variable or file name inside a rename function
Example 13: Input a filename and rename it with new name.
#include<stdio.h>
#include<conio.h>
void main()
{
char oldname[50];
char newname[50];
clrscr();
//rename("abc.dat","student.dat"); //using filename
rename(oldname,newname); //using variable name
getch();
}
remove() function: Use to remove a file. You can use variable or file name to a rename function
Example 14: Input a filename and remove it.
#include<stdio.h>
#include<conio.h>
void main()
{
char filename[50];
clrscr();
//remove("student.dat"); //using filename
remove(filename); //using variable name
getch();
}
Ad: