A program can open and close, and read from, and write to, a file that is defined by the user
This is generally done when you have
- large volumes of stored data, or
- complex data (such as structs) or
- non-printable data
These don't happen often. Nevertheless, for the sake of completeness, here is a program that
-
reads a number from a file input.txt
-
writes the count from 1 to that number to the file output.txt
-
it is user-friendly : it tells the user that an output file has been created
-
// files.c // read a number 'num' from a file input.txt // write a count from 1 to 'num' to the file OUT #define IN "input.txt" #define OUT "output.txt" #include <stdio.h> #include <stdlib.h> #define NUMDIG 6 // size of numerical strings that are output int main(void) { FILE *fpi, *fpo; // these are file pointers char s[NUMDIG]; fpi = fopen(IN, "r"); if (fpi == NULL) { // an important check fprintf(stderr, "Can't open %s ", IN); return EXIT_FAILURE; } else { int num; if (fscanf(fpi, "%d", &num) != 1) { // an important check fprintf(stderr, "No number found in %s ", IN); return EXIT_FAILURE; } else { fclose(fpi); // don't need the input file anymore fpo = fopen(OUT, "w"); if (fpo == NULL) { // an important check fprintf(stderr, "Can't create %s! ", OUT); return EXIT_FAILURE; } else { // got input and got an output file fprintf(fpo, "%s", "Counts "); for (int i=1; i<=num; i++) { sprintf(s, "%d", i); fprintf(fpo, "%s ", s); } fclose(fpo); printf("file %s created ", OUT); return EXIT_SUCCESS; } } } }
input.txt
10
output.txt
prompt$ dcc files.c prompt$ ./a.out file output.txt created prompt$ more output.txt Counts 1 2 3 4 5 6 7 8 9 10 11 12 13