Spec-Zone.ru › C++

std::fopen

Определён в заголовочном файле <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)
Поведение не определено, если mode не является одной из перечисленных выше строк. Некоторые реализации поддерживают дополнительные режимы (например, Windows).

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

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

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

Примечания

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

Рекомендации по переносимому именованию каталогов и файлов см. в библиотеке файловой системы C++ или 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; // Note: int, not char, required to handle EOF
    while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop
        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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/fopen

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API