file handling spring 2013programming and data structure1
TRANSCRIPT
![Page 1: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/1.jpg)
File Handling
Spring 2013 Programming and Data Structure 1
![Page 2: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/2.jpg)
File handling in C
• In C we use FILE * to represent a pointer to a file. • fopen is used to open a file. It returns the special value NULL to indicate that it couldn't open the file.
Spring 2013 Programming and Data Structure 2
FILE *fptr;char filename[]= "file2.dat";fptr= fopen (filename,"w");if (fptr == NULL) { printf (“ERROR IN FILE CREATION”); /* DO SOMETHING */}
![Page 3: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/3.jpg)
Modes for opening files
• The second argument of fopen is the mode in which we open the file. There are three
• "r" opens a file for reading• "w" creates a file for writing - and writes over all
previous contents (deletes the file so be careful!)
• "a" opens a file for appending - writing on the end of the file
• “rb” read binary file (raw bytes)• “wb” write binary fileSpring 2013 Programming and Data Structure 3
![Page 4: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/4.jpg)
The exit() function• Sometimes error checking means we want
an "emergency exit" from a program. We want it to stop dead.
• In main we can use "return" to stop.• In functions we can use exit to do this.• Exit is part of the stdlib.h library
Spring 2013 Programming and Data Structure 4
exit(-1); in a function is exactly the same asreturn -1; in the main routine
![Page 5: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/5.jpg)
Usage of exit( )
FILE *fptr;char filename[]= "file2.dat";fptr= fopen (filename,"w");if (fptr == NULL) { printf (“ERROR IN FILE CREATION”); /* Do something */ exit(-1);}
Spring 2013 Programming and Data Structure 5
![Page 6: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/6.jpg)
Writing to a file using fprintf( )
• fprintf( ) works just like printf except that its first argument is a file pointer.
Spring 2013 Programming and Data Structure 6
FILE *fptr;fptr= fopen ("file.dat","w");/* Check it's open */fprintf (fptr,"Hello World!\n");
![Page 7: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/7.jpg)
Reading Data Using fscanf( )
FILE *fptr;fptr= fopen (“input.dat”,“r”);/* Check it's open */if (fptr==NULL) { printf(“Error in opening file \n”); }fscanf(fptr,“%d%d”,&x,&y);
Spring 2013 Programming and Data Structure 7
• We also read data from a file using fscanf( ).
20 30
input.dat
x=20y=30
![Page 8: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/8.jpg)
Reading lines from a file using fgets( )
We can read a string using fgets ( ).
Spring 2013 Programming and Data Structure 8
FILE *fptr;char line [1000];/* Open file and check it is open */while (fgets(line,1000,fptr) != NULL) { printf ("Read line %s\n",line);}
fgets( ) takes 3 arguments, a string, a maximumnumber of characters to read and a file pointer.It returns NULL if there is an error (such as EOF).
![Page 9: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/9.jpg)
Closing a file
• We can close a file simply using fclose( ) and the file pointer.
Spring 2013 Programming and Data Structure 9
FILE *fptr;char filename[]= "myfile.dat";fptr= fopen (filename,"w");if (fptr == NULL) { printf ("Cannot open file to write!\n"); exit(-1);}fprintf (fptr,"Hello World of filing!\n");fclose (fptr);
Opening
Access
closing
![Page 10: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/10.jpg)
Three special streams• Three special file streams are defined in the
<stdio.h> header• stdin reads input from the keyboard• stdout send output to the screen• stderr prints errors to an error device
(usually also the screen)• What might this do?
Spring 2013 Programming and Data Structure 10
fprintf (stdout,"Hello World!\n");
![Page 11: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/11.jpg)
An example program
Spring 2013 Programming and Data Structure 11
#include <stdio.h>main(){ int i;
fprintf(stdout,"Give value of i \n"); fscanf(stdin,"%d",&i); fprintf(stdout,"Value of i=%d \n",i); fprintf(stderr,"No error: But an example to show error message.\n"); }
Give value of i 15Value of i=15 No error: But an example to show error message.
Display onThe screen
![Page 12: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/12.jpg)
Input File & Output File redirection
• One may redirect the input and output files to other files (other than stdin and stdout).
• Usage: Suppose the executable file is a.out
Spring 2013 Programming and Data Structure 12
$ ./a.out <in.dat >out.dat
15
in.dat
Give value of i Value of i=15
out.dat
No error: But an example to show error message.
Displayscreen
![Page 13: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/13.jpg)
Reading and Writing a character
• A character reading/writing is equivalent to reading/writing a byte.
int getchar( ); int fgetc(FILE *fp); int putchar(int c); int fputc(int c, FILE *fp);• Example: char c; c=getchar( ); putchar(c); Spring 2013 Programming and Data Structure 13
![Page 14: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/14.jpg)
Example: use of getchar() and putchar()
Spring 2013 Programming and Data Structure 14
#include <stdio.h>main(){ int c;
printf("Type text and press return to see it again \n"); printf("For exiting press <CTRL D> \n"); while((c=getchar( ))!=EOF) putchar(c); }
End of file
![Page 15: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/15.jpg)
Command Line Arguments
• Command line arguments may be passed by specifying them under main( ).
int main(int argc, char *argv[ ]);
Spring 2013 Programming and Data Structure 15
ArgumentCount Array of Strings
as command linearguments including the command itself.
![Page 16: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/16.jpg)
Example: Reading command line arguments
Spring 2013 Programming and Data Structure 16
#include <stdio.h>#include <string.h>
int main(int argc,char *argv[]){FILE *ifp,*ofp;int i,c;char src_file[100],dst_file[100]; if(argc!=3){ printf("Usage: ./a.out <src_file> <dst_file> \n"); exit(0); } else{ strcpy(src_file,argv[1]); strcpy(dst_file,argv[2]); }
![Page 17: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/17.jpg)
Example: Contd.
Spring 2013 Programming and Data Structure 17
if((ifp=fopen(src_file,"r"))==NULL){ printf("File does not exist.\n"); exit(0); }if((ofp=fopen(dst_file,"w"))==NULL){ printf("File not created.\n"); exit(0); } while((c=getc(ifp))!=EOF){ putc(c,ofp); } fclose(ifp); fclose(ofp);}
./a.out s.dat d.dat
argc=3
./a.out
s.dat
d.datargv
![Page 18: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/18.jpg)
Getting numbers from strings• Once we've got a string with a number in it
(either from a file or from the user typing) we can use atoi or atof to convert it to a number
• The functions are part of stdlib.h
Spring 2013 Programming and Data Structure 18
char numberstring[]= "3.14";int i;double pi;pi= atof (numberstring);i= atoi ("12");
Both of these functions return 0 if they have a problem
![Page 19: File Handling Spring 2013Programming and Data Structure1](https://reader035.vdocuments.net/reader035/viewer/2022072015/56649eda5503460f94be99a3/html5/thumbnails/19.jpg)
Example: Averaging from Command Line
Spring 2013 Programming and Data Structure 19
#include <stdio.h>#include <stdlib.h>
int main(int argc,char *argv[]){ float sum=0; int i,num; num=argc-1; for(i=1;i<=num;i++) sum+=atof(argv[i]); printf("Average=%f \n",sum/(float) num);}
$ ./a.out 45 239 123
Average=135.666667