cfopen

Difference between r+ and w+ in fopen()


In fopen("myfile", "r+") what is the difference between the "r+" and "w+" open mode? I read this:

"r" Open a text file for reading.
"w" Open a text file for writing, truncating an an existing file to zero length, or creating the file if it does not exist.

"r+" Open a text file for update (that is, for both reading and writing).
"w+" Open a text file for update (reading and writing), first truncating the file to zero length if it exists or creating the file if it does not exist.

I mean the difference is that if I open the file with "w+", the file will be erased first?


Solution

  • The main difference is w+ truncate the file to zero length if it exists or create a new file if it doesn't. While r+ neither deletes the content nor create a new file if it doesn't exist.

    Try these codes and you will understand:

    #include <stdio.h>
    int main()
    {
       FILE *fp;
    
       fp = fopen("test.txt", "w+");
       fprintf(fp, "This is testing for fprintf...\n");
       fputs("This is testing for fputs...\n", fp);
       fclose(fp);
    }  
    

    and then this

    #include <stdio.h>
    int main()
    {
       FILE *fp;
    
       fp = fopen("test.txt", "w+");
       fclose(fp);
    }   
    

    If you will open test.txt, you will see that all data written by the first program has been erased.
    Repeat this for r+ and see the result.
    Here is the summary of different file modes:

    enter image description here