关键词

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

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

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

参数

  • filename:要打开的文件的名称。
  • mode:文件的访问模式,例如 "r" 用于读取,"w" 用于写入,"a" 用于附加等,如下表所示。
  • stream:要关联的现有文件流,如 stdin、stdout 或 stderr。

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

  • 以“r”的方式打开文件时,表示只能从该文件中读取数据,并且保证要打开的文件已经存在,否则将产生错误。
  • 以“w”的方式打开文件时,表示只能向文件中写数据。如果原来不存在该文件,则会以指定的文件名创建一个新文件。如果该文件已经存在,则打开文件时原来的数据将被删除。
  • 以“a”的方式打开文件时,表示在原文件末尾追加数据。如果打开的文件不存在,则创建一个新文件。
  • 以“r+”、“w+”、“a+”的方式打开文件时,既可以从该文件中读取数据,也可以向文件中写入数据。以“r+”的方式打开文件时,必须保证该文件是存在的。以“w+”的方式打开文件时,先创建文件然后写入数据。以“r+”的方式打开文件时,原来的文件不被删除,在原来的文件末尾追加数据。
  • 以“rb”、“wb”、“ab”、“rb+”、“wb+”、“ab+”的方式打开的文件是二进制文件,以“r”、“w”、“a”、“r+”、“w+”、“a+”的方式打开的文件是文本文件。

返回值

如果文件成功打开,则返回指向与流关联的文件指针;如果失败,则返回 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 文件,而不是屏幕。

本文链接:http://task.lmcjl.com/news/4522.html

展开阅读全文