Разница между r + и w + в fopen()
В fopen("myfile", "r+")
какая разница между открытым режимом "r+"
и "w+"
? Я читал это:
"r"
Откройте текстовый файл для чтения.
"w"
Откройте текстовый файл для записи, обрезание существующего файла до нулевой длины или создание файла, если он не существует.
"r+"
Откройте текстовый файл для обновления (то есть для чтения и письмо).
"w+"
Откройте текстовый файл для обновления (чтение и запись), первый усеченный файл до нулевой длины, если он существует или создается файл, если он не существует.
Я имею в виду, что разница в том, что если я открою файл с помощью "w+"
, файл будет удален сначала?
Ответы
Ответ 1
Основное отличие заключается в том, что w+
файл до нулевой длины, если он существует, или создает новый файл, если его нет. В то время как r+
не удаляет содержимое и не создает новый файл, если он не существует.
Попробуйте эти коды, и вы поймете:
#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);
}
а потом это
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("test.txt", "w+");
fclose(fp);
}
Затем откройте файл test.txt
и посмотрите, что произойдет. Вы увидите, что все данные, записанные первой программой, были стерты.
Повторите это для r+
и посмотрите результат. Надеюсь, вы поймете.
Ответ 2
Оба r+
и w+
могут читать и записывать в файл. Однако r+
не удаляет содержимое файла и не создает новый файл, если такой файл не существует, тогда как w+
удаляет содержимое файла и создает его, если он не существует.
Ответ 3
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)
Итак, если файл уже существует, w + стирает файл и дает вам пустой файл.
Ответ 4
Есть 2 отличия, в отличие от r+
, w+
будет:
- создать файл, если он еще не существует
- сначала усечь его, т.е. удалить его содержимое
Ответ 5
r + Существующий файл открывается для начала и для чтения, и для записи.
w + То же, что и w, кроме как для чтения, так и для записи.
Ответ 6
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);
}
выход
This is testing for fprintf...
test.txt
This is testing for fprintf...
w и r для формирования 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);
}
выход
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;
}
выход
This is testing for fprintf...
test.txt
This is testing for fprintf again...
r и w, чтобы сформировать 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;
}
выход
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;
}
выход
This is testing for fprintf...
test.txt
This is testing for fprintf...
This is testing for fprintf again...
и r для формирования 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;
}
выход
This is testing for fprintf...
test.txt
This is testing for fprintf...
This is testing for fprintf again...