Spec-Zone.ru › C++

std::fopen

Defined in header <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++ файловой системы или 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/w/cpp/io/c/fopen

Spec-Zone.ru

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