Sie sind auf Seite 1von 77

FILE *Handling Concepts in C;

TRUPTI TADKAL
AND
CHITTARANJAN BARAL

Background
Console oriented I/O functions use keyboard
as input device and monitor as output
device.
The I/O functions like printf(), scanf(),
getchar(), putchar(), gets(), puts()
Problem:
1. Entire data is lost when either the
program is terminated or the computer is
turned off.
2. When the volume of data to be entered is
large, it takes a lot of time to enter the
data.
3. If user makes a mistake while entering
2013 Graphene Semiconductor Confidential

Concept of file

File
is a place on the disk (not memory)
where a group of related data is
stored. Also called data files.
The Data File
allows us to store information
permanently and to access and
alter that information whenever
necessary.
2013 Graphene Semiconductor Confidential

Classification of disk/file I/O functions

2013 Graphene Semiconductor Confidential

Some high-level I/O functions

2013 Graphene Semiconductor Confidential

Defining and Opening a file


The general format for declaring and
opening a file is:
FILE *fp;
fp=fopen(filename,
mode);
Here, the first statement declares the
variable fp as a pointer to the data
type FILE.
The second statement opens the file
named filename with the purpose
mode and the beginning address of the
2013 Graphene Semiconductor Confidential

File Opening Modes


There are mainly six modes:

1.r (i.e. read mode)


2.w (i.e. write mode)
3.a (i.e. append mode)
4.r+ (i.e. read and write mode)
5.w+ (i.e. write and read mode)
6.a+ (i.e. append and read
mode)
2013 Graphene Semiconductor Confidential

Closing a file
The closing a file ensures that all
outstanding information associated
with the file is flushed out from the
buffers and all links to the file are
broken.
In cases where there is a limit to the
no. of files that can be kept open
simultaneously, closing of unwanted
files help in opening the required ones.
Another instance where we have to
close a file is when we want to reopen
the same file in different mode.
2013 Graphene Semiconductor Confidential

Library Functions for Reading/Writing


from/to a File: File I/O Functions
Once a file is opened, reading out of or
writing to it is accomplished using the
standard I/O functions.

2013 Graphene Semiconductor Confidential

String Input/Output Functions


Using string I/O functions fgets() and
fputs(), data can be read from a file or
written to a file in the form of array of
characters.

i. fgets(): is used to read string


from file.
Syntax: fgets(string,
int_value, fp);
Here, int_value denotes the no. of
characters in the string.
2013 Graphene Semiconductor Confidential

/* Program to create a file named test.txt and write some text */


#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
clrscr();
fp=fopen("D:\\test.txt", "w");
if(fp==NULL)
{
printf("\n Cannot create file.");
exit(0);
}
else
{
printf("\n File is created.");
}
fputs("I study CSIT", fp);
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

/* Program to open the file named test.txt, read its content and display it to screen */
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char s[100];
clrscr();
fp=fopen("D:test.txt", "r");
if(fp==NULL)
{
printf("\n Cannot open file.");
exit(0);
}
else
{
printf("\nFile is opened.");
}
fgets(s,19,fp);
printf("\n Text from file is:%s", s);
fclose(fp);
getch();
}

2013 Graphene Semiconductor Confidential

/* Program to open the file named test.txt & add to it the text in CAB */
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
clrscr();
fp=fopen("D:\\test.txt", "a");
if(fp==NULL)
{
printf("\n Cannot open file.");
exit(1);
}
else
{
printf("\n File is opened.");
}
fputs(in CAB", fp);
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

Naming a file
void main()
{
FILE *fp;
char filename[20];
clrscr();
printf("Enter filename:\t");
gets(filename);
fp=fopen(filename, "w");
if(fp==NULL)
{
printf("\n Cannot create file.");
exit(1);
}
else
{
printf("\n File is created.");
}
getch();
}
// If only filename is given, file is created in C:\TC\BIN otherwise file is created in the
given path.
2013 Graphene Semiconductor Confidential

Character I/O Functions


Using character I/O functions fgetc() and
fputc(), data can be read from file or written
onto file one character at a time.

i. fgetc(): is used to read


character from a file.
Syntax:
char_variable=fgetc(fp);
ii.fputc(): is used to write
character to a file.
Syntax:
2013 Graphene Semiconductor Confidential

/* Program to create a file and write some text to it one character at a


time using fputc() function until user hits the enter key*/
void main()
{
FILE *fp;
char filename[20];
char c;
clrscr();
printf("Enter filename:\t");
gets(filename);
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("\n Cannot create file.");
exit();
}
else
printf("\n File is created.");
printf("\n Enter your text until Enter key:\n");
while((c=getchar())!='\n')
fputc(c,fp);
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

/* Program to open a file, read its content one character at a


time using fgetc() function and display it to screen*/
void main()
{
FILE *fp;
char filename[20];
char c;
clrscr();
printf("Enter filename:\t");
gets(filename);
fp=fopen(filename, "r");
if(fp==NULL)
{
printf("\n Cannot open file.");
exit();
}

printf("\n The content of file is:\n");


while((c=fgetc(fp))!=EOF)
putchar(c);
fclose(fp);
getch();
}

//EOF=>end-of-file

2013 Graphene Semiconductor Confidential

End-Of-File (EOF)
EOF is a special character (an integer
with ASCII value 26) that indicates that
the end-of-file has been reached. This
character can be generated from the
keyboard by typing Ctrl+Z.
Defined in <stdio.h>
When we are creating a file, the special
character EOF, is inserted after the last
character of the file by the Operating
System.
Caution: An attempt to read after EOF
2013 Graphene Semiconductor Confidential

/* Program to append some text to a file by reading filename


from user*/
void main()
{
FILE *fp;
char filename[20];
char c;
clrscr();
printf("Enter filename:\t");
gets(filename);
fp=fopen(filename,"a");
if(fp==NULL)
{
printf("\n Cannot create or open file.");
exit();
}
printf("\nEnter text to append to file %s:\n", filename);
while((c=getchar())!='\n')
fputc(c,fp);
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

/* Program to open a file and copy all its content to another file*/
void main()
{
FILE *sfp,*dfp;
char sfilename[20],dfilename[20];
char c;
clrscr();
printf("Enter source filename:\t");
gets(sfilename);
printf("\n Enter destination filename:\t");
gets(dfilename);
sfp=fopen(sfilename,"r");
if(sfp==NULL)
{
printf("\nSource file can't be opened.");
exit();
}
dfp=fopen(dfilename, "w");
if(dfp==NULL)
{
printf("\n Destination file cannot be created or opened.");
exit();
}
while((c=fgetc(sfp))!=EOF)
fputc(c, dfp);
printf("\n Copied........");
fclose(dfp);
fclose(sfp);
getch();
}

2013 Graphene Semiconductor Confidential

Question
Given a text file, create another text
file deleting all the vowels (a, e, i,
o, u).

2013 Graphene Semiconductor Confidential

void main()
{
FILE *fp,*fpp;
char c;
fp=fopen("C:\\test.txt","r+");
clrscr();
if(fp==NULL)
{
printf("Cannot open file");
exit();
}
fpp=fopen("C:\\hello.txt","w");
if(fpp==NULL)
{
printf("Cannot create file");
exit();
}
while((c=fgetc(fp))!=EOF)
{
if((c!='a')&&(c!='e')&&(c!='i')&&(c!='o')&&(c!='u'))
fputc(c, fpp);
}
fclose(fp);
fclose(fpp);
getch();
}

2013 Graphene Semiconductor Confidential

Formatted I/O Functions


Using formatted I/O functions, fprintf() and
fscanf(), numbers, characters or string can
be read from file or written onto file
according to our requirement format.
i. fprintf(): is formatted output function
which is used to write integer, float,
char or string value to a file. Syntax:
fprintf(fp, control_string,
list_of_variables);
ii. fscanf(): is formatted input function
which is used to read integer, float,
2013 Graphene Semiconductor Confidential

/* Program to create a file named student.txt and write name,


roll, address and marks of a student to this file*/

void main()
{
FILE *fp;
char name[20];
int roll;
char address[20];
float marks;
clrscr();
fp=fopen("C:\\student.txt", "w");
if(fp==NULL)
{
printf("\n File cannot be created or opened.");
exit();
}
2013 Graphene Semiconductor Confidential

printf("\n Enter name of student:\t");


gets(name);
printf("\n Enter roll number of %s:\t", name);
scanf("%d", &roll);
fflush(stdin);
printf("\n Enter address of %s:\t", name);
gets(address);
printf("\n Enter marks of %s:\t", name);
scanf("%f", &marks);
printf("\n Now writing data to file...");
fprintf(fp, "Name=%s\n Roll=%d\n Address=%s\n Marks=%.2f", name,
roll, address, marks);
printf("\n Completed");
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

Use of fflush()
Here, after providing name of student,
we
would
hit
enter
keyNo
Problemand then we provide roll of
studentand hit the enter key
again...Problem...
At this time the enter key which is in
the keyboard buffer is read by the
gets()/scanf() function for address (as
enter key is a character, \n), so that we
are able to fill only the marks.
To avoid this problem, we use the
function fflush().
2013 Graphene Semiconductor Confidential

Question

Define a structure for Vehicle


Owner having data members
name,
address,
telephone
number, vehicle number and
license number. Take the data
for ten owners, write them in
file Own.txt. Read the data
from the file and display them.
2013 Graphene Semiconductor Confidential

struct vehicle_owner
{
char name[20];
char address[20];
long int phone_no;
int vehicle_no;
int license_no;
};
void main()
{
FILE *fp;
struct vehicle_owner vehicle[10], v[10];
int i;
clrscr();
fp=fopen("C:\\Own.txt","w");
if(fp==NULL)
{
printf("\nCannot create file.");
exit();
}
2013 Graphene Semiconductor Confidential

for(i=0;i<SIZE;i++)
{
printf("\n Enter information about vehicle owner %d",i+1);
printf("\n Enter name :\t");
gets(vehicle[i].name);
printf("\n Enter address:\t");
gets(vehicle[i].address);
printf("\n Enter telephone no:\t");
scanf("%ld", &vehicle[i].phone_no);
printf("\n Enter vehicle no:\t");
scanf("%d", &vehicle[i].vehicle_no);
printf("\n Enter license no:\t");
scanf("%d", &vehicle[i].license_no);
fprintf(fp,"%s\t%s\t%ld\t%d\t%d\n", vehicle[i].name, vehicle[i].address,
vehicle[i].phone_no, vehicle[i].vehicle_no, vehicle[i].license_no);
fflush(stdin);
}
2013 Graphene Semiconductor Confidential

fclose(fp);
fp=fopen("C:\\Own.txt","r");
for(i=0;i<10;i++)
{
fscanf(fp,"%s %s %ld %d
%d",&v[i].name,&v[i].address,&v[i].phone_no,&v[i].vehicle
_no,&v[i].license_no);
printf("%s\t%s\t%ld\t%d\t
%d\n",v[i].name,v[i].address,v[i].phone_no,v[i].vehicle_no,
v[i].license_no);
}
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

Problem

Given a text file, create


another text file deleting the
following words three,
bad, and time.

2013 Graphene Semiconductor Confidential

#include <stdio.h>
void main()
{
FILE *fp,*fpp;
char c[10];
fp=fopen("C:\\test.txt",r");
clrscr();
if(fp==NULL)
{
printf("Cannot open file");
exit();
}
fpp=fopen("C:\\hello.txt","w");
if(fpp==NULL)
{
printf("Cannot create file");
exit();
}
while(fscanf(fp,"%s",c)!=EOF)
{
if((strcmp(c,"three")!=0)&&(strcmp(c,"bad")!=0)&&(strcmp(c,"time")!=0))
{
fprintf(fpp,"%s ",c);
}
}
fclose(fp);
fclose(fpp);
getch();
}
2013 Graphene Semiconductor Confidential

Problem
Some text file is given, create another
text file replacing the following words
Ram to Hari, Sita to Gita, and
Govinda to Shiva.

2013 Graphene Semiconductor Confidential

#include <stdio.h>
void main()
{
FILE *fp,*fpp;
char c[10];
fp=fopen("C:\\test.txt","r");
clrscr();
if(fp==NULL)
{
printf("Cannot open file");
exit();
}
fpp=fopen("C:\\hello.txt","w");
if(fpp==NULL)
{
printf("Cannot create file");
exit();
}
while(fscanf(fp,"%s",c)!=EOF)
{
if(strcmp(c, "Ram")==0)
fprintf(fpp, "Hari ",c);
else if(strcmp(c, "Sita")==0)
fprintf(fpp,"Gita",c);
else if(strcmp(c, "Govinda")==0)
fprintf(fpp, "Shiva",c);
else
fprintf(fpp,"%s ",c);
}
fclose(fp);
fclose(fpp);
getch();
}

2013 Graphene Semiconductor Confidential

Question
Create a program to create a data file
and write the integers from 1 to 20 to
this file and then read the numbers
from the file to display the squares of
the stored numbers.

2013 Graphene Semiconductor Confidential

#include <stdio.h>
void main()
{
FILE *fp;
register unsigned int i;
unsigned filedata;
clrscr();
fp=fopen("C:\\data.txt","w");
if(fp==NULL)
{
printf("\nCannot create data file.");
exit();
}
for(i=1;i<21;i++)
{
fprintf(fp,"%u\t",i);
}
fclose(fp);
fp=fopen("C:\\data.txt","r");
printf("\nThe squares of the stored numbers are:\t");
for(i=1;i<21;i++)
{
fscanf(fp,"%u",&filedata);
filedata=filedata*filedata;
printf("%u\t", filedata);
}
getch();
}

2013 Graphene Semiconductor Confidential

Question
A file named DATA contains a series of
integer numbers. Code a program to read
these numbers and then write all odd
numbers to a file to be called ODD and all
even numbers to a file to be called EVEN.

2013 Graphene Semiconductor Confidential

#include <stdio.h>
void main()
{
FILE *fpdata;
FILE *fpodd;
FILE *fpeven;
int i,n;
int num;
clrscr();
printf("\nHow many integers you want in data file?:\t");
scanf("%d",&n);
printf("\nEnter %d integers:\t",n);
fpdata=fopen("C:\\DATA.txt","w");
for(i=0;i<n;i++)
{
scanf("%d",&num);
fprintf(fpdata,"%d\n",num);
}
fclose(fpdata);
fpdata=fopen("C:\\DATA.txt","r");
fpodd=fopen("C:\\ODD.txt","w");
fpeven=fopen("C:\\EVEN.txt","w");

2013 Graphene Semiconductor Confidential

for(i=0;i<n;i++)
{
fscanf(fpdata,"%d", &num);
if(num%2==0)
fprintf(fpeven,"%d\t", num);
else
fprintf(fpodd,"%d\t", num);
}
fclose(fpdata);
fclose(fpodd);
fclose(fpeven);
getch();
}
2013 Graphene Semiconductor Confidential

Error situations during I/O operations

Trying to read beyond the endof-file mark.


Trying to use a file that has not
been opened.
Trying to perform an operation
on a file, when the file is
opened for another type of
operation.
Opening a file with an invalid
2013 Graphene Semiconductor Confidential

Error handling functions


I/O errors can be detected using two
status-inquiry library functions: feof() and
ferror().
feof(): It is used to test for an end-of-file
condition. It takes a FILE pointer as its
only argument and returns a nonzero
integer value if all of the data from the
specified file has been read, and returns
zero otherwise. If fp is a pointer to a file
that has just been opened for reading,
then the statement
if(feof(fp))
2013 Graphene Semiconductor Confidential

Error handling functions

ferror(): This function reports the


status of the file indicated. It takes
a FILE pointer as its argument and
returns a nonzero integer if an
error has been detected up to that
point, during processing. It returns
zero otherwise. So the statement
if(ferror(fp)!=0)
printf(An
error
has
occurred);
2013 Graphene Semiconductor Confidential

void main()
{
FILE *fp1;
char *filename;
int i, num;
clrscr();
fp1=fopen("C:\\test.txt", "w");
for(i=10;i<=100;i += 10)
{
fprintf(fp1,"%d\t", i);
}
fclose(fp1);
printf("\n Enter filename:\t");
open_file:
scanf("%s", filename);

//Type C:\test.txt

2013 Graphene Semiconductor Confidential

if((fp1=fopen(filename,"r"))==NULL)
{
printf("\nAn error occured while opening the file.");
printf("\nType filename again:\t");
goto open_file;
}
else
for(i=1;i<=20;i++)
{
fscanf(fp1,"%d", &num);
if(feof(fp1))
{
printf("\nRan out of data.");
break;
}
else
printf("%d\n", num);
}
fclose(fp1);
getch();
}
2013 Graphene Semiconductor Confidential

void main()
{
FILE *fp;
int num;
clrscr();
fp = fopen("DUMMY.FIL", "w");
/* force an error condition by attempting to read */
fscanf(fp,"%d", &num);
if (ferror(fp)!=0)
{
printf("Error reading from DUMMY.FIL\n");
}
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

Binary Data Files


The binary files organize data into blocks
containing contiguous bytes of information.
In binary file, the opening mode of text file is
appended by a character b i.e.
Note:
i. r is replaced by
rbFor text
mode
we
can
ii.w is replaced write
by wb
rt in place
iii.a is replaced of
by r,
abwt in
place of wand
iv.r+ is replacedsoby
r+b
on.
However, it
is
unnessary
v. w+ is replaced by w+b
because
default
vi.a+ is replaced
by a+b
mode
is
text
mode
2013 Graphene Semiconductor Confidential

void main()
{
FILE *fp;
char c;
clrscr();
fp=fopen("C:\\test.txt","w+b");
if(fp==NULL)
{
printf("\nCannot create file.");
exit();
}
fputs("I study B.Sc. CSIT", fp);
fclose(fp);
getch();
}
2013 Graphene Semiconductor Confidential

So, whats the difference between text mode and binary mode
and which mode to use???

Analyze with 3 factors:

I. How newlines (\n) are stored?


II. How end-of-file is indicated?
III.How numbers are stored in
the file?

How newlines are stored in binary mode???

2013 Graphene Semiconductor Confidential

/*Count no. of characters, spaces, and newlines in a file*/


void main()
{
FILE *fp;
char text[100];
char c;
int noc=0,nos=0,nol=0;
fp=fopen("C:\\poem.txt", "r");
if(fp==NULL)
{
printf("\nCannot create or open file.");
exit();
}
while(1)
{
c=fgetc(fp);
if(c==EOF)
break;
2013 Graphene Semiconductor Confidential

The poem.txt file contains:


Johnny Johnny
Yes Papa
Eating Sugar
No Papa
Telling Lies
No Papa
Open Your Mouth
hahaha

So output is:
No. of
characters=87
No. of spaces=8
No. of lines=7
which is correct.
Now, go to DOS
shell and use the
DIR command in
C-drive to view
the no. of
characters
(bytes) that the
2013 Graphene Semiconductor Confidential

First factor
In text mode, a newline character is
converted into the carriage returnlinefeed combination before being
written to disk.
Likewise, the carriage return-linefeed
combination on the disk is converted
back into a newline when the file is
read by a C program.
However, if a file is opened in binary
mode, as opposed to text mode, these
conversions do not take place.
In binary mode, each end of line is
2013 Graphene Semiconductor Confidential

/*Count no. of characters, spaces, and newlines in a file*/


void main()
{
FILE *fp;
char text[100];
char c;
int noc=0,nos=0,nol=0;
fp=fopen("C:\\poem.txt", "rb");
if(fp==NULL)
{
printf("\nCannot create or open file.");
exit();
}
while(1)
{
c=fgetc(fp);
if(c==EOF)
break;
2013 Graphene Semiconductor Confidential

Second Factor

In text mode, a special character


EOF whose ASCII value is 26 is
inserted after the last character in
the file to mark the end of file.
However, there is no such special
character present in the binary
mode files to mark the end of file.
The binary mode files keep track of
the end of file from the number of
characters present in the directory
2013 Graphene Semiconductor Confidential

Third Factor
In text mode, the text and numbers are
stored as string of characters such that
the number 12345 will occupy 5 bytes
(1 byte/character).
Similarly 1234.56 occupies 7 bytes on
disk in text mode.
However, in binary mode the numbers
are stored in the same way as they are
stored in RAM so that the number
12345 occupies only 2 bytes and
1234.56 occupies only 4 bytes on disk
in binary mode.
2013 Graphene Semiconductor Confidential

Record I/OBackground Problems

The character I/O and string I/O


functions allow reading/writing of
character data only, while the
formatted I/O functions allow
reading/writing of character data
and numeric data both.
Problem: Numbers are always
stored as a sequence of characters
using
these
I/O
functions
(irrespective of whether text mode
2013 Graphene Semiconductor Confidential

Another Problem: There is no direct way to read and write


complex data types such as arrays and structures. Arrays and
structures are handled by writing/reading one element at a
time or using loops, but this approach is inefficient.
#include <stdio.h>
Example:
void main()

{
FILE *fp;
char another='Y';
struct emp
{
char name[40];
int age;
float salary;
};
struct emp e;
Here, if the no. of fields
fp=fopen("c:\\emp.dat","wb");
if(fp==NULL)
in the structure
{
increase (say by adding
puts("Cannot create or open file");
address, house rent
exit();
allowance etc.), writing
}
while(another=='Y')
structures using
2013 Graphene Semiconductor Confidential
{
fprintf(), or reading

Record Input/Output Functions


Defined in <stdio.h>
fwrite(): is used for record output.
Syntax:
fwrite(&p, size_of_array_or_structure,
no._of_array_or_structure, fp);
fread(): is used for record input.
Syntax:
fread (&p, size_of_array_or_structure,
no._of_array_or_structure, fp);

2013 Graphene Semiconductor Confidential

#include <stdio.h>
void main()
{
FILE *fp;
char another='Y';
struct emp
{
char name[40];
int age;
float salary;
};
struct emp e;
clrscr();
fp=fopen("c:\\emp.dat","wb");
if(fp==NULL)
{
puts("Cannot create or open file");
exit();
}
while(another=='Y'||another=='y')
{
printf("\n Enter name, age and basic salary:");
scanf("%s %d %f", e.name, &e.age,
&e.salary);
2013
Graphene Semiconductor Confidential

/* Same program to write/read array of structure to a


binary mode file*/
#include <stdio.h>
void main()
{
FILE *fp;
struct emp
{
char name[40];
int age;
float salary;
};
struct emp e[2],ee[2];
int i;
float temp;
clrscr();
fp=fopen("c:\\employee.dat","wb");
if(fp==NULL)
{
puts("Cannot create or open file");
exit();
}
for(i=0;i<2;i++)
{
printf("\nEnter name, age and2013
basicGraphene
salary:");
Semiconductor Confidential

Random Access in a File (Direct Access)

Till now, reading and writing data


from/to a file has been done
sequentially.
But we may need to access a
particular data item placed in any
location without starting from the
beginning.
This is called random access or
direct access.
2013 Graphene Semiconductor Confidential

Use of file pointer for random access


A file pointer is a pointer to a particular byte in a
file.
While opening a file in write mode, the file
pointer is at the beginning of the file, and
whenever we write to a file, the file pointer
moves to the end of the data items written so
that writing can continue from that point.
While opening a file in read mode, the file
pointer is at the beginning of the file, and
whenever we read from a file, the file pointer
moves to the beginning of the next data item so
that reading cam continue from that point.
While opening a file in append mode, the file
pointer is at the end of the existing file, so that
2013 Graphene Semiconductor Confidential

Functions used in random access

1. ftell(): This function takes a file


pointer as argument and returns a
number of type long, that indicates
the current position of the file
pointer within the file. This function
is useful in saving the current
position of a file, which can be used
later in the program.
Syntax
n = ftell(fp);
Here, n would give the relative
2013 Graphene Semiconductor Confidential

Functions used in random access


2. rewind():This function takes a file pointer
as argument and resets the current
position of the file pointer to the start of
the file.
Syntax:- rewind(fp);
What
these
statements
do?:
rewind(fp);
n=ftell(fp);
Here, n would be assigned 0, because file
position has been set to the start of the
file by rewind().

2013 Graphene Semiconductor Confidential

Functions used in random access


3. fseek(): This function is used to move the file pointer to a
desired position within a file.
Syntax
fseek(fp, offset, position);
where fp is a file pointer, offset is a number or variable data type
long, and position is an integer number
. The offset specifies the number of positions (bytes) to be moved
from the location specified by position.
. The position can have one of the following 3 values:

2013 Graphene Semiconductor Confidential

fseek()
The offset may be positive, meaning
move forwards, or negative, meaning
move backwards.
Examples:

2013 Graphene Semiconductor Confidential

fseek()

When the operation is successful,


fseek() returns a 0 (zero).
If we attempt to move the file
pointer beyond the file boundaries,
an error occurs and fseek()
returns -1 (minus one).
It is good practice to check
whether an error has occurred or
not, before proceeding further.
2013 Graphene Semiconductor Confidential

/*A program that uses the functions ftell() and fseek()*/


#include <stdio.h>
void main()
{
FILE *fp;
char c;
long n;
clrscr();
fp=fopen("RANDOM","w");
if(fp==NULL)
{
printf("\nCannot create file.");
exit();
}
while((c=getchar())!=EOF)
fputc(c,fp);
printf("\nNo. of characters entered=%ld",ftell(fp));
fclose(fp);
fp=fopen("RANDOM","r");
if(fp==NULL)
{
printf("\nCannot create file.");
exit();
}

2013 Graphene Semiconductor Confidential

Explanation
A file called RANDOM is created with
the following contents:
Stored Character:
A B C Z
File Pointer Position: 0 1 2 25
Then the file is read twice.
At first, we read the contents of every
fifth position and print its value with its
position on the screen.
At second, we read the contents of the
file from the end and print the same on
2013 Graphene Semiconductor Confidential

Problem

A book record consists of its title,


author, pages and price. Write a
program to perform following
operations:
Read the records of 13 books
Create at least one structure pointer
to display the records of 13 books
Store records of all 13 books in the
file booklist.dat
Read only the information of 9 books
from booklist.dat skipping 2 books
2013 Graphene Semiconductor Confidential

#define SIZE 13
void main()
{
struct book
{
char title[40];
char author[20];
int pages;
float price;
};
struct book b[SIZE];
int i;
float temp;
struct book *bp;
FILE *fp;
struct book bb[SIZE];
clrscr();
for(i=0;i<SIZE;i++)
{
printf("\nEnter record of book%d",i+1);
printf("\nEnter title:\t");
scanf("%s",b[i].title);
fflush(stdin);
printf("\nEnter author:\t");
scanf("%s",b[i].author);
printf("\nEnter no. of pages:\t");
scanf("%d",&b[i].pages);
printf("\nEnter price:\t");
scanf("%f",&temp);
b[i].price=temp;
}

2013 Graphene Semiconductor Confidential

bp=b; //bp=&b[0];
for(i=0;i<SIZE;i++)
{
printf("\nRecord of Book%d",i+1);
printf("\nTitle:%s\tAuthor:%s",(bp+i)->title,(bp+i)->author);
printf("\nNo. of pages:%d\tPrice:%.2f\n",(bp+i)->pages,(bp+i)->price);
}
fp=fopen("booklist.dat","w+b");
if(fp==NULL)
{
puts("Cannot create file");
exit();
}
for(i=0;i<SIZE;i++)
fwrite(&b,sizeof(b),1,fp);
rewind(fp);
fseek(fp,sizeof(b)*2,0);
i=2;

2013 Graphene Semiconductor Confidential

Problem

A car record consists of its model,


manufacture_year and price. Write a
program
to
perform
following
operations:
Read the records of 13 cars.
Create at least one structure
pointer to display the records of 13
cars.
Store records of all 13 cars in the
file c.mpg.
Read only the information of 5 cars
2013 Graphene Semiconductor Confidential

Problem

Create
a
structure
named
employee having empname, age
and salary as its members. Read
these information for a number of
employees (till user wants) and
write these information to a file
named employee.txt in C-drive.
Finally, the program should be able
to search the information of a
particular
employee
by
its
empname from the file.
2013 Graphene Semiconductor Confidential

void main()
{
struct employee
{
char empname[20];
int age;
float salary;
};
struct employee e;
FILE *fp;
char name[20];
char ch='y';
int search=0;
fp=fopen("C:\\employee.txt","w+b");
clrscr();
do
{
printf("\nEnter name, age and salary of employee:");
scanf("%s %d %f", e.empname, &e.age, &e.salary);
fwrite(&e,sizeof(e),1,fp);
fflush(stdin);
printf("\nDo you want to information for another employee(y for yes):");
scanf("%c", &ch);
}while(ch=='y');
rewind(fp);
2013 Graphene Semiconductor Confidential
printf(\n\tEnter employee to be searched:\t");

Problem

Write a program to open a file


employee.txt created in above
program and edit/modify the
details of a particular employee.

2013 Graphene Semiconductor Confidential

void main()
{
struct employee
{
char empname[20];
int age;
float salary;
};
struct employee e;
FILE *fp;
char name[20];
int search=0;
int record_count=0;
fp=fopen("C:\\employee.txt","rb+");
clrscr();
if(fp==NULL)
{
printf("Cannot open file");
exit();
}
printf("\tEnter employee name to be modified:\t");
gets(name);
while(fread(&e,sizeof(e),1,fp)==1)
{
if(strcmp(name, e.empname)==0)
{
search=1;

2013 Graphene Semiconductor Confidential

Thank You

www.graphsemi.com

Das könnte Ihnen auch gefallen