Spec-Zone.ru › C++

std::freopen

Определён в заголовочном файле <cstdio>
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );

Сначала пытается закрыть файл, связанный с stream, игнорируя любые ошибки. Затем, если filename не является нулевым указателем, пытается открыть файл, указанный в filename, используя mode, как если бы был вызван std::fopen, и связывает этот файл с файловым потоком, на который указывает stream. Если filename является нулевым указателем, функция пытается повторно открыть файл, уже связанный с stream (в этом случае допустимые изменения режима определяются реализацией).

Параметры

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

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

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

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

stream в случае успеха, нулевой указатель в случае ошибки.

Примечания

std::freopen — единственный способ изменить узкую/широкую ориентацию потока после того, как она была установлена операцией ввода-вывода или вызовом std::fwide.

Версия std::freopen в Microsoft CRT не поддерживает изменения режима, когда filename является нулевым указателем, и считает это ошибкой (см. документацию). Возможным обходным решением является нестандартная функция _setmode().

Пример

Следующий код перенаправляет stdout в файл.

#include <cstdio>

int main()
{
    std::printf("stdout is printed to console\n");
    if (std::freopen("redir.txt", "w", stdout))
    {
        std::printf("stdout is redirected to a file\n"); // this is written to redir.txt
        std::fclose(stdout);
    }
}

Вывод:

stdout is printed to console

См. также

fopen
открывает файл
(функция)
fclose
закрывает файл
(функция)
Документация по C для freopen

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

Spec-Zone.ru

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