Подтвердить что ты не робот

Разница между r + и w + в fopen()

В fopen("myfile", "r+") какая разница между открытым режимом "r+" и "w+"? Я читал это:

"r" Откройте текстовый файл для чтения.
"w" Откройте текстовый файл для записи, обрезание существующего файла до нулевой длины или создание файла, если он не существует.

"r+" Откройте текстовый файл для обновления (то есть для чтения и письмо).
"w+" Откройте текстовый файл для обновления (чтение и запись), первый усеченный     файл до нулевой длины, если он существует или создается файл, если он не существует.

Я имею в виду, что разница в том, что если я открою файл с помощью "w+", файл будет удален сначала?

4b9b3361

Ответ 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...