What is aFile?
âą A file is a collection of related data that a computers
treats as a single unit.
âą Computers store files to secondary storage so that
the contents of files remain intact when a computer
shuts down.
âą When a computer reads a file, it copies the file from
the storage device to memory; when it writes to a
file, it transfers data from memory to the storage
device.
âą C uses a structure called FILE (defined in
stdio.h) to store the attributes of a file.
3.
Steps in Processinga File
1. Create the stream via a pointer variable using
the FILE structure:
FILE *p;
2. Open the file, associating the stream name
with the file name.
3. Read or write the data.
4. Close the file.
4.
The basic fileoperations are
âą fopen - open a file- specify how its opened
(read/write) and type (binary/text)
âą fclose - close an opened file
âą fread - read from a file
âą fwrite - write to a file
âą fseek/fsetpos - move a file pointer to somewhere in a
file.
âą ftell/fgetpos - tell you where the file pointer is
located.
More on FileOpen Modes
from Figure 7-4 in Forouzan & Gilberg, p. 401
7.
Additionally,
âą r+ -open for reading and writing, start at
beginning
âą w+ - open for reading and writing (overwrite
file)
âą a+ - open for reading and writing (append if
file exists)
8.
File Open
âą Thefile open function (fopen) serves two
purposes:
â It makes the connection between the physical file
and the stream.
â It creates âa program file structure to store the
informationâ C needs to process the file.
âą Syntax:
filepointer=fopen(âfilenameâ, âmodeâ);
9.
More On fopen
âąThe file mode tells C how the program will use
the file.
âą The filename indicates the system name and
location for the file.
âą We assign the return value of fopen to our
pointer variable:
spData = fopen(âMYFILE.TXTâ, âwâ);
spData = fopen(âA:MYFILE.TXTâ, âwâ);
Closing a File
âąWhen we finish with a mode, we need to close
the file before ending the program or
beginning another mode with that same file.
âą To close a file, we use fclose and the
pointer variable:
fclose(spData);
putc()
write a singlecharacter to the output file,
pointed to by fp.
Example:
FILE *fp;
char ch;
putc (ch,fp);
16.
End of File
âąThere are a number of ways to test for the end-of-file
condition. Another way is to use the value returned by the
fscanf function:
FILE *fptr1;
int istatus ;
istatus = fscanf (fptr1, "%d", &var) ;
if ( istatus == feof(fptr1) )
{
printf ("End-of-file encountered.nâ) ;
}
17.
Reading and WritingFiles
#include <stdio.h>
int main ( )
{
FILE *outfile, *infile ;
int b = 5, f ;
float a = 13.72, c = 6.68, e, g ;
outfile = fopen ("testdata", "w") ;
fprintf (outfile, â %f %d %f ", a, b, c) ;
fclose (outfile) ;
infile = fopen ("testdata", "r") ;
fscanf (infile,"%f %d %f", &e, &f, &g) ;
printf (â %f %d %f n ", a, b, c) ;
printf (â %f %d %f n ", e, f, g) ;
}
fread ()
Declaration:
size_t fread(void*ptr, size_t size, size_t n, FILE *stream);
Remarks:
fread reads a specified number of equal-sized
data items from an input stream into a block.
ptr = Points to a block into which data is read
size = Length of each item read, in bytes
n = Number of items read
stream = file pointer
20.
Example
Example:
#include <stdio.h>
int main()
{
FILE*f;
char buffer[11];
if (f = fopen("fred.txt", ârâ))
{
fread(buffer, 1, 10, f);
buffer[10] = 0;
fclose(f);
printf("first 10 characters of the file:n%sn", buffer);
}
return 0;
}
21.
fwrite()
Declaration:
size_t fwrite(const void*ptr, size_t size, size_t n, FILE*stream);
Remarks:
fwrite appends a specified number of equal-sized data items to an output file.
ptr = Pointer to any object; the data written begins at ptr
size = Length of each item of data
n =Number of data items to be appended
stream = file pointer
fseek()
This function setsthe file position indicator for the stream pointed to by stream or you can
say it seeks a specified place within a file and modify it.
SEEK_SET Seeks from beginning of file
SEEK_CUR Seeks from current position
SEEK_END Seeks from end of file
Example:
#include <stdio.h>
int main()
{
FILE * f;
f = fopen("myfile.txt", "w");
fputs("Hello World", f);
fseek(f, 6, SEEK_SET); SEEK_CUR, SEEK_END
fputs(" India", f);
fclose(f);
return 0;
}
24.
ftell()
offset = ftell(file pointer );
"ftell" returns the current position for input or output on the file
#include <stdio.h>
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w");
fprintf(stream, "This is a test");
printf("The file pointer is at byte %ldn", ftell(stream));
fclose(stream);
return 0;
}