Рубрики

fopen () для существующего файла в режиме записи

В C fopen () используется для открытия файла в разных режимах. Чтобы открыть файл в режиме записи, указывается «w». Когда указан режим «w», он создает пустой файл для операций вывода.

Что если файл уже существует?
Если файл с таким именем уже существует, его содержимое отбрасывается, и файл обрабатывается как новый пустой файл. Например, в следующей программе, если «test.txt» уже существует, его содержимое удаляется и в него записывается «GeeksforGeeks».

#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;

}

Вышеуказанное поведение может привести к неожиданным результатам. Если программист намеревался создать новый файл и файл с таким именем уже существует, содержимое существующего файла будет перезаписано.

Новейший стандарт C C11 предоставляет новый режим «x», который является эксклюзивным режимом создания и открытия. Режим «x» может использоваться с любым спецификатором «w», например, «wx», «wbx». Когда x используется с w, fopen () возвращает NULL, если файл уже существует или не может открыть. Ниже приводится модифицированная программа C11, которая не перезаписывает существующий файл.

#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;

}

Ссылки:
Не делайте предположений о fopen () и создании файла
http://en.wikipedia.org/wiki/C11_(C_standard_revision)
http://www.cplusplus.com/reference/cstdio/freopen/

Эта статья составлена Абхай Рати . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

fopen () для существующего файла в режиме записи

0.00 (0%) 0 votes