In C, fopen() is used to open a file in different modes. To open a file in write mode, “w” is specified. When mode “w” is specified, it creates an empty file for output operations.
What if the file already exists?
If a file with the same name already exists, its contents are discarded and the file is treated as a new empty file. For example, in the following program, if “test.txt” already exists, its contents are removed and “GeeksforGeeks” is written to it.
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp = fopen ( "test.txt" , "w" ); if (fp == NULL) { puts ( "Couldn't open file" ); exit (0); } else { fputs ( "GeeksforGeeks" , fp); puts ( "Done" ); fclose (fp); } return 0; } |
The above behavior may lead to unexpected results. If programmer’s intention was to create a new file and a file with same name already exists, the existing file’s contents are overwritten.
The latest C standard C11 provides a new mode “x” which is exclusive create-and-open mode. Mode “x” can be used with any “w” specifier, like “wx”, “wbx”. When x is used with w, fopen() returns NULL if file already exists or could not open. Following is modified C11 program that doesn’t overwrite an existing file.
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp = fopen ( "test.txt" , "wx" ); if (fp == NULL) { puts ( "Couldn't open file or file already exists" ); exit (0); } else { fputs ( "GeeksforGeeks" , fp); puts ( "Done" ); fclose (fp); } return 0; } |
References:
Do not make assumptions about fopen() and file creation
http://en.wikipedia.org/wiki/C11_(C_standard_revision)
http://www.cplusplus.com/reference/cstdio/freopen/
This article is compiled by Abhay Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
leave a comment
0 Comments