std::freopen
来自cppreference.com
在标头 <cstdio> 定义
|
||
首先,尝试关闭与 stream 关联的文件,忽略任何错误。然后,若 filename 非空,则尝试如同用 std::fopen 以 mode 打开 filename 所指定的文件,然后将该文件与 stream 所指向的文件流关联。若 filename 为空指针,则函数参数重打开已与 stream 关联的文件(此情况下允许哪种模式改变是实现定义的)。
参数
filename | - | 要关联文件流的文件 |
mode | - | 确定新文件打开模式的空终止字符串 |
stream | - | 要修改的文件流 |
文件访问标记
文件访问模式字符串 | 含义 | 解释 | 若文件已存在的行动 | 若文件不存在的行动 |
---|---|---|---|---|
"r" | 读 | 为读取打开文件 | 从起始读取 | 打开失败 |
"w" | 写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
"a" | 追加 | 追加到文件 | 写入到末尾 | 创建新文件 |
"r+" | 扩展读 | 为读取/写入打开文件 | 从起始读取 | 错误 |
"w+" | 扩展写 | 为读取/写入创建文件 | 销毁内容 | 创建新文件 |
"a+" | 扩展追加 | 为读取/写入打开文件 | 写入到末尾 | 创建新文件 |
文件访问模式标志 "b" 能可选地指定以二进制模式打开文件。此标志在 POSIX 系统上无效果,但例如在 Windows 上,它禁用对 '\n' 和 '\x1A' 的特殊处理。 在追加文件访问模式上,写入数据到文件尾,忽略文件位置指示器的当前位置。 | ||||
文件访问模式标志 "x" 能可选地追加到 "w" 或 "w+" 指定符。此标志强制函数在文件存在的情况下失败,而非重写文件。(C++17) | ||||
若模式不是以上字符串之一,则行为未定义。一些实现定义了额外的支持模式(例如 MSVC)。 |
返回值
成功时为 stream,失败时为空指针。
注解
std::freopen 是一旦由 I/O 操作或 std::fwide 建立取向后,改变流窄/宽取向的唯一方式。
std::freopen
的 Microsoft CRT 版本在 filename 为空指针时不支持任何模式更改并将它当作错误(见文档)。可行的替代方案是非标准函数 _setmode()
。
示例
下列代码重定向 stdout
到文件
运行此代码
#include <cstdio> int main() { std::printf("stdout 打印到控制台\n"); if (std::freopen("redir.txt", "w", stdout)) { std::printf("stdout 重定向到文件\n"); // 这被写入 redir.txt std::fclose(stdout); } }
输出:
stdout 打印到控制台
参阅
打开文件 (函数) | |
关闭文件 (函数) |