std::freopen

来自cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定义于头文件 <cstdio>
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );

首先,试图关闭与 stream 关联的文件,忽略任何错误。然后,若 filename 非空,则试图用 mode 打开 filename 所指定的文件,如同用 fopen ,然后将该文件与 stream 所指向的文件流关联。若 filename 为空指针,则函数试图重打开已与 stream 关联的文件(此情况下是否允许模式改变是实现定义的)。

目录

[编辑] 参数

filename - 要关联文件流到的文件
mode - 确定新文件打开模式的空终止字符串
文件访问
模式字符串
含义 解释 若文件已存在
的行动
若文件不存在
的行动
"r" 为读取打开文件 从起始读取 打开失败
"w" 为写入创建文件 销毁内容 创建新文件
"a" 后附 后附到文件 写入到末尾 创建新文件
"r+" 读扩展 为读取/写入打开文件 从起始读取 错误
"w+" 写扩展 为读/写创建文件 销毁内容 创建新文件
"a+" 后附扩展 为读/写打开文件 写入到末尾 创建新文件
文件访问模式标志 "b" 能可选地指定,以用二进制模式打开文件。此标志在 POSIX 系统上无效果,但例如在 Windows 上,它禁用 '\n''\x1A' 的特殊处理。
在后附文件访问模式上,写入数据到文件尾,忽略文件位置指示器的当前位置。
文件访问模式标志 "x" 能可选地后附到 "w" 或 "w+" 指定符。此标志强制函数在文件存在的情况下失败,而非重写文件。(C++17)
若模式不是以上字符串之一,则行为未定义。一些实现定义额外的支持模式(例如 Windows )。
stream - 要修改的文件流

[编辑] 返回值

成功时为 stream ,失败时为 NULL

[编辑] 注意

freopen 是一旦由 I/O 操作或 std::fwide 建立面向后,改变流窄/宽面向的唯一方式。

[编辑] 示例

下列代码重定向 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"); // 这被写入 redir.txt
        std::fclose(stdout);
    }
}

输出:

stdout is printed to console

[编辑] 参阅

打开文件
(函数) [编辑]
关闭文件
(函数) [编辑]
freopenC 文档