Namespaces
Variants

std:: fopen

From cppreference.net
< cpp ‎ | io ‎ | c
Определено в заголовочном файле <cstdio>
std:: FILE * fopen ( const char * filename, const char * mode ) ;

Открывает файл, указанный в filename и возвращает файловый поток, связанный с этим файлом. mode используется для определения режима доступа к файлу.

Содержание

Параметры

filename - имя файла для ассоциации с файловым потоком
mode - строка символов с нулевым завершителем, определяющая режим доступа к файлу

Флаги доступа к файлу

Режим доступа к файлу
(строка)
Значение Объяснение Действие, если файл
уже существует
Действие, если файл
не существует
"r" чтение Открыть файл для чтения чтение с начала возвращает NULL и устанавливает ошибку
"w" запись Создать файл для записи уничтожить содержимое создать новый
"a" добавление Добавление в файл запись в конец создать новый
"r+" расширенное чтение Открыть файл для чтения/записи чтение с начала возвращает NULL и устанавливает ошибку
"w+" расширенная запись Создать файл для чтения/записи уничтожить содержимое создать новый
"a+" расширенное добавление Открыть файл для чтения/записи запись в конец создать новый
Флаг режима доступа к файлу "b" может быть дополнительно указан для открытия файла в бинарном режиме . Этот флаг не оказывает влияния на POSIX-системах, но на Windows, например, отключает специальную обработку ' \n ' и ' \x1A ' .
В режимах доступа с добавлением данные записываются в конец файла независимо от текущей позиции указателя файла.
Флаг режима доступа к файлу "x" может быть дополнительно добавлен к спецификаторам "w" или "w+" . Этот флаг заставляет функцию завершиться ошибкой, если файл существует, вместо его перезаписи. (C++17)
Поведение не определено, если режим не является одной из перечисленных выше строк. Некоторые реализации определяют дополнительные поддерживаемые режимы (например, Windows ).

Возвращаемое значение

В случае успеха возвращает указатель на объект, управляющий открытым файловым потоком, с очищенными битами eof и error. Поток полностью буферизован, если только filename не ссылается на интерактивное устройство.

При ошибке возвращает нулевой указатель. Стандарт POSIX требует , чтобы в этом случае был установлен errno .

Примечания

Формат filename определяется реализацией и не обязательно ссылается на файл (например, это может быть консоль или другое устройство, доступное через файловую систему API). На платформах, которые их поддерживают, filename может включать абсолютный или относительный путь файловой системы.

Для переносимого именования каталогов и файлов обратитесь к C++ filesystem library или boost.filesystem .

Пример

#include <cstdio>
#include <cstdlib>
int main()
{
    int is_ok = EXIT_FAILURE;
    FILE* fp = std::fopen("/tmp/test.txt", "w+");
    if (!fp)
    {
        std::perror("File opening failed");
        return is_ok;
    }
    int c; // Примечание: int, а не char, требуется для обработки EOF
    while ((c = std::fgetc(fp)) != EOF) // Стандартный цикл чтения файла ввода-вывода C
        std::putchar(c);
    if (std::ferror(fp))
        std::puts("I/O error when reading");
    else if (std::feof(fp))
    {
        std::puts("End of file reached successfully");
        is_ok = EXIT_SUCCESS;
    }
    std::fclose(fp);
    return is_ok;
}

Вывод:

End of file reached successfully

Смотрите также

закрывает файл
(функция)
синхронизирует выходной поток с фактическим файлом
(функция)
открывает существующий поток с другим именем
(функция)