Namespaces
Variants

std:: freopen

From cppreference.net
< cpp ‎ | io ‎ | c
Определено в заголовке <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" read Открыть файл для чтения чтение с начала возвращает NULL и устанавливает ошибку
"w" write Создать файл для записи уничтожить содержимое создать новый
"a" append Добавление в файл запись в конец создать новый
"r+" read extended Открыть файл для чтения/записи чтение с начала возвращает NULL и устанавливает ошибку
"w+" write extended Создать файл для чтения/записи уничтожить содержимое создать новый
"a+" append extended Открыть файл для чтения/записи запись в конец создать новый
Флаг режима доступа к файлу "b" может быть дополнительно указан для открытия файла в бинарном режиме . Этот флаг не влияет на системы POSIX, но в Windows, например, отключает специальную обработку ' \n ' и ' \x1A ' .
В режимах доступа с добавлением данные записываются в конец файла независимо от текущей позиции указателя файла.
Флаг режима доступа к файлу "x" может быть дополнительно добавлен к спецификаторам "w" или "w+" . Этот флаг заставляет функцию завершиться ошибкой, если файл существует, вместо его перезаписи. (C++17)
Поведение не определено, если режим не является одной из перечисленных выше строк. Некоторые реализации определяют дополнительные поддерживаемые режимы (например, Windows ).

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

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

Примечания

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

Версия Microsoft CRT функции std::freopen не поддерживает изменение режимов, когда 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

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

открывает файл
(функция)
закрывает файл
(функция)
C documentation для freopen