C provides a range of functions in the header file stdio.h for writing to and reading from external devices. The external device you would use for storing and retrieving data is typically a disk drive, but not exclusively. Because, consistent with the philosophy of C, the library facilities you’ll use for working with files are device independent, they apply to virtually any external storage device.
The C library provides functions for reading and writing to or from data streams. A stream is an abstract representation of any external source or destination for data, so the keyboard, the command line on your display, and files on a disk are all examples of things you can work with as streams. You use the same input/ output functions for reading and writing any external device that is mapped to a stream.
|"w"||Open a text file for write operations. If the file exists, its current contents are discarded.|
|"a"||Open a text file for append operations. All writes are to the end of the file.|
|"r"||Open a text file for read operations.|
You associate a specific external file name with an internal file pointer variable through a process referred to as opening a file. One way to open a file is by calling the fopen() function that returns the file pointer for a specific external file. There’s a safer alternative function, fopen_s(), which I’ll come to in a moment. The fopen() function is defined in stdio.h, and it has this prototype:
FILE *fopen(const char * restrict name, const char * restrict mode);
If you want to write to an existing text file with the name myfile.txt, you would use this statement:
FILE *pfile = NULL;
char *filename = "myfile.text";
if(!fopen_s(&pfile, filename, "w")) // Open myfile.txt to write it
printf_s("Failed to open %s.\n", filename);
If you want to add to an existing text file rather than overwrite it, you specify mode "a", which is the append mode of operation. This positions the file at the end of any previously written data. If the file doesn’t exist, a new file will be created. If you want to reuse the file pointer you declared previously to open the file to add data to the end, use the following statement:
fopen_s(&pfile, "myfile.txt", "a"); // Open myfile.txt to add to it
If you want to read a file, open it using this statement:
fopen_s(&pfile, "myfile.txt", "r");