首页 > 编程笔记

C语言freopen():重新打开文件

freopen() 是 C语言的一个标准库函数,定义在<stdio.h>头文件中。

freopen() 函数的功能是以新的模式(读、写或者追加)打开一个新文件,并将其和指定的文件流关联。函数的原型如下:
FILE *freopen(const char *filename, const char *mode, FILE *stream);

参数


表:参数 mode 的取值及含义
mode 的取值 含 义
"r" 以“只读”方式打开文本文件(该文件必须已经存在)
"w" 以“写入”的方式打开文本文件
"a" 以追加的方式打开一个文本文件
"rb" 以读取的方式打开一个二进制文件(该文件必须已经存在)
"wb" 以写入的方式打开一个二进制文件
"ab" 以追加的方式打开一个二进制文件
"r+" 以读或写的方式打开一个文本文件(该文件必须已经存在)
"w+" 以读或写的方式创建一个新的文本文件
"a+" 以读或写的方式打开一个文本文件
"rb+" 以读或写的方式打开一个二进制文件(该文件必须已经存在)
"wb+" 以读或写的方式创建一个二进制文件
"ab+" 以读或写的方式打开一个二进制文件

返回值

如果文件成功打开,则返回指向与流关联的文件指针;如果失败,则返回 NULL 并设置全局错误指示器 errno。

调用 freopen() 函数时,如果文件流 stream 已经打开了其他文件,freopen() 会首先关闭与 stream 关联的文件,然后再打开新指定的文件。

【实例】下面的 C语言代码示例展示了用 freopen() 函数重定向标准输出到一个文件的过程。
#include <stdio.h>

int main() {
    // 重定向stdout到一个文件
    if (freopen("output.txt", "w", stdout) == NULL) {
        perror("Error redirecting stdout");
        return 1;
    }

    // 正常地使用printf,但输出会写入文件output.txt
    printf("Hello, World!\n");

    // 关闭重定向的stdout
    fclose(stdout);

    return 0;
}
在这个例子中,通过调用 freopen() 将标准输出 stdout 重定向到名为 output.txt 的文件。因此,printf() 函数会将文本写入到 output.txt 文件,而不是屏幕。

推荐阅读