Reputation: 5534
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?
Upvotes: 95
Views: 229513
Reputation: 1173
Here is a quick reference diagram showing how to choose a file mode:
Note that a+
, w
, and w+
modes will create a new file if it doesn't already exist.
Upvotes: 93
Reputation: 106012
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:
Upvotes: 64
Reputation: 654
w+
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "w+"); //write and read mode
fprintf(fp, "This is testing for fprintf...\n");
rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf...
w and r to form w+
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "w"); //only write mode
fprintf(fp, "This is testing for fprintf...\n");
fclose(fp);
fp = fopen("test.txt", "r");
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf...
r+
test.txt
This is testing for fprintf...
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "r+"); //read and write mode
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
fprintf(fp, "This is testing for fprintf again...\n");
fclose(fp);
return 0;
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf again...
r and w to form r+
test.txt
This is testing for fprintf...
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "r");
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp);
fp=fopen("test.txt","w");
fprintf(fp, "This is testing for fprintf again...\n");
fclose(fp);
return 0;
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf again...
a+
test.txt
This is testing for fprintf...
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "a+"); //append and read mode
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
fprintf(fp, "This is testing for fprintf again...\n");
fclose(fp);
return 0;
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf...
This is testing for fprintf again...
a and r to form a+
test.txt
This is testing for fprintf...
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "a"); //append and read mode
char ch;
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp);
fp=fopen("test.txt","r");
fprintf(fp, "This is testing for fprintf again...\n");
fclose(fp);
return 0;
}
output
This is testing for fprintf...
test.txt
This is testing for fprintf...
This is testing for fprintf again...
Upvotes: 6
Reputation: 3
r+ The existing file is opened to the beginning for both reading and writing. w+ Same as w except both for reading and writing.
Upvotes: 0
Reputation:
Both r+
and w+
can read and write to a file. However, r+
doesn't delete the content of the file and doesn't create a new file if such file doesn't exist, whereas w+
deletes the content of the file and creates it if it doesn't exist.
Upvotes: 100
Reputation: 804
r = read mode only
r+ = read/write mode
w = write mode only
w+ = read/write mode, if the file already exists override it (empty it)
So yes, if the file already exists w+ will erase the file and give you an empty file.
Upvotes: 25
Reputation: 97948
There are 2 differences, unlike r+
, w+
will:
Upvotes: 3