2. Console oriented Input/Output
Console oriented – use terminal (keyboard/screen)
scanf( ) – read data from keyboard
printf( ) – print data to monitor
Suitable for small volumes of data!!!
Data lost when program terminated!!!
3/11/2024 Department of CSE 2
3. Real-life applications
•Large data volumes
• E.g. physical experiments (human genome, population
records etc.)
•Need for flexible approach to store/retrieve data
→ Files
3/11/2024 Department of CSE 3
4. Files
• File – place on disc where group of related data is stored.
▫ E.g. your C++ programs, executable etc.
• High-level programming languages support various operations on files
▫ Naming
▫ Opening
▫ Reading
▫ Writing
▫ Closing
3/11/2024 Department of CSE 4
5. Defining and opening file
• To store data file in secondary memory (disc) it must
specify to OS:
▫ Filename (e.g. sort.c, input.data)
▫ Datastructure (e.g. FILE)
▫ Purpose (e.g. reading, writing, appending)
3/11/2024 Department of CSE 5
6. Filename
• String of characters that make up a valid filename for
OS
• May contain two parts
▫ Primary (name)
▫ Optional period with extension
• Examples: a.txt,
program.c,
temp,
text.out
3/11/2024 Department of CSE 6
7. FILE- Data structure
• FILE is user defined data type defined in stdio.h
3/11/2024 Department of CSE 7
FILE *fp; //declaration of pointer to FILE structure
8. Different modes: purpose
• Writing mode
▫ if file already exists then contents are deleted,
▫ else new file with specified name created
• Appending mode
▫ if file already exists then file opened with contents safe
▫ else new file created
• Reading mode
▫ if file already exists then opened with contents safe
▫ else error occurs.
3/11/2024 Department of CSE 8
FILE *p1, *p2;
p1 = fopen(“data”, “r”);
p2= fopen(“results”, “w”);
9. General format for opening file
• fp
▫ contains all information about file
▫ Communication link between system and program
• Mode can be
▫ r open file for reading only
▫ w open file for writing only
▫ a open file for appending (adding) data
3/11/2024 Department of CSE 9
FILE *fp; /*variable fp is pointer to type FILE*/
fp = fopen(“filename”, “mode”);
/*opens file with name filename , assigns identifier to fp */
fp is a file pointer of type FILE , this file pointer is just to store
the composite information about a file subject to manipulation.
10. Additional modes
•r+ open to beginning for both reading/writing
•w+ same as ‘w’ except both for reading and writing
•a+ same as ‘a’ except both for reading and writing
3/11/2024 Department of CSE 10
11. Closing a file
• File must be closed as soon as all operations on it is
completed.
• Ensures
▫ All outstanding information associated with file flushed out
from buffers.
▫ All links to file broken.
▫ Accidental misuse of file prevented.
• If want to change mode of file, then first close and open
again.
3/11/2024 Department of CSE 11
12. Closing a file
• pointer can be reused after closing.
3/11/2024 Department of CSE 12
Syntax: fclose(file_pointer);
Example:
FILE *p1, *p2;
p1 = fopen(“INPUT.txt”, “r”);
p2 =fopen(“OUTPUT.txt”, “w”);
……..
……..
fclose(p1);
fclose(p2);
13. Input/Output operations on files
The different functions for reading/writing are
• getc() – read a character
• putc() – write a character
• fprintf() – write set of data values
• fscanf() – read set of data values
• getw() – read integer
• putw() – write integer
3/11/2024 Department of CSE 13
14. getc() and putc()
• handle one character at a time like getchar() and putchar()
• syntax: putc(c,fp1);
▫ c : a character variable
▫ fp1 : pointer to file opened with mode w
• syntax: c = getc(fp2);
▫ c : a character variable
▫ fp2 : pointer to file opened with mode r
• file pointer moves by one character position after every getc()
and putc()
• getc() returns end-of-file marker EOF when file end is
reached.
• In Code::Blocks getchar(), getc() returns an integer, putchar()
and putc() takes an integer. Type cast the integer to a char.
3/11/2024 Department of CSE 14
15. Program to read/write using getc/putc
3/11/2024 Department of CSE 15
#include <stdio.h>
int main()
{ FILE *fp1;
char c;
fp1= fopen("INPUT", "w"); /* open file for writing */
printf("Enter contents of the file: n");
while((c=(char)getchar()) != EOF) /*get char from keyboard until CTRL-Z*/
putc((char)c,fp1); /*write a character to INPUT */
fclose(fp1); /* close INPUT */
fp1=fopen("INPUT", "r"); /* reopen file */
while((c=(char)getc(fp1))!=EOF) /*read character from file INPUT*/
printf("%c", c); /* print character to screen */
fclose(fp1);
return 0;
}
16. getw() and putw()
• handle one integer at a time
• syntax: putw(i,fp1);
• i : an integer variable
• fp1 : pointer to file opened with mode w
• syntax: i = getw(fp2);
• i : an integer variable
• fp2 : pointer to file opened with mode r
• file pointer moves by one integer position, data stored in binary
format native to local system
• getw() returns end-of-file marker EOF when file end reached
3/11/2024 Department of CSE 16
17. Using getw, putw
#include <stdio.h>
int main()
{ int i,sum=0;
FILE *f1;
/* open files */
f1 = fopen("data.bin" ,"w");
/* write integers to files in
binary and text format*/
for(i=1;i<5;i++)
putw(i,f1);
fclose(f1);
3/11/2024 Department of CSE 17
f1 = fopen("data.bin","r");
while((i=getw(f1))!=EOF)
{ sum+=i; //summation
printf(“Integer read: %d”, i);
} /* end while */
printf(“sum: %d”, sum);
fclose(f1);
}
18. Errors that occur during I/O
Typical errors that occur
▫ trying to read beyond end-of-file
▫ trying to use a file that has not been opened
▫ perform operation on file not permitted by ‘fopen’ mode
▫ open file with invalid filename
▫ write to write-protected file
3/11/2024 Department of CSE 18
19. Error handling
• given file-pointer, check if EOF reached, errors while handling file,
problems opening file etc.
• check if EOF reached: feof()
• feof() takes file-pointer as input, returns nonzero if all data read and zero
otherwise
if(feof(fp))
printf(“End of datan”);
• ferror() takes file-pointer as input, returns nonzero integer if error
detected else returns zero
if(ferror(fp) !=0)
printf(“An error has occurredn”);
3/11/2024 Department of CSE 19
20. Error while opening file
• if file cannot be opened then fopen() returns a NULL pointer
• Good practice to check if pointer is NULL before proceeding
fp = fopen(“input.dat”, “r”);
if (fp == NULL)
printf(“File could not be opened n ”);
3/11/2024 Department of CSE 20
21. Convert a text file to all UPPERCASE
3/11/2024 Department of CSE 21
int main() {
FILE *in, *out ;
char c ;
in = fopen (“infile.dat”, “r”) ;
out = fopen (“outfile.dat”, “w”) ;
while ((c = getc (in)) != EOF)
putc (toupper (c), out); // you can use any logic
fclose (in) ;
fclose (out) ;
}
Display the converted file using getc() & cout !.
22. Copy a file to another file
3/11/2024 Department of CSE 22
int main(){
clrscr();
FILE *p,*q;
char file1[20],file2[20];
char ch;
printf("nSource file name:“);
gets(file1);
p=fopen(file1,"r");
if(p==NULL){
printf("cannot open file %s”, file1);
return 0;
}
23. Copy a file to another file
3/11/2024 Department of CSE 23
printf("nDestination file name:“);
gets(file2);
q=fopen(file2,"w");
if(q==NULL){
printf("cannot open file %s”, file2);
return 0;
}
while((ch=getc(p))!=EOF)
{ putc(ch,q); // cout<<ch; [on screen]
}
printf("nCOMPLETED“);
fclose(p);
fclose(q); }
24. Summary
• File concept
• Operations on a file
• File Modes
• File manipulation/handling functions
3/11/2024 Department of CSE 24