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" | 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
|
|