std:: freopen
|
定义于头文件
<cstdio>
|
||
|
std::
FILE
*
freopen
(
const
char
*
filename,
const
char
*
mode,
std::
FILE
*
stream
)
;
|
||
首先,尝试关闭与 stream 关联的文件,忽略任何错误。然后,如果 filename 非空,则尝试使用 mode 以 std::fopen 的方式打开 filename 指定的文件,并将该文件与 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 是唯一能在流通过I/O操作或 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 文档
关于
freopen
|
|