std::freopen
来自 cppreference.com
定义在头文件 <cstdio> 中 |
||
首先,尝试关闭与 stream 关联的文件,忽略任何错误。然后,如果 filename 不是空指针,尝试使用 mode 打开 filename 指定的文件,就像使用 std::fopen 一样,并将该文件与 stream 指向的文件流关联起来。如果 filename 是一个空指针,则该函数尝试重新打开已与 stream 关联的文件(在这种情况下,允许哪些模式更改是实现定义的)。
内容 |
[编辑] 参数
filename | - | 要将文件流关联到的文件名 |
mode | - | 确定新的 文件访问模式 的空终止字符字符串 |
stream | - | 要修改的文件流 |
[编辑] 文件访问标志
文件访问 mode 字符串 |
含义 | 解释 | 如果文件 已存在 |
如果文件 不存在 |
---|---|---|---|---|
"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 文档 for freopen
|