C语言freopen():重新打开文件
freopen() 是 C语言的一个标准库函数,定义在
freopen() 函数的功能是以新的模式(读、写或者追加)打开一个新文件,并将其和指定的文件流关联。函数的原型如下:
调用 freopen() 函数时,如果文件流 stream 已经打开了其他文件,freopen() 会首先关闭与 stream 关联的文件,然后再打开新指定的文件。
【实例】下面的 C语言代码示例展示了用 freopen() 函数重定向标准输出到一个文件的过程。
<stdio.h>
头文件中。freopen() 函数的功能是以新的模式(读、写或者追加)打开一个新文件,并将其和指定的文件流关联。函数的原型如下:
FILE *freopen(const char *filename, const char *mode, FILE *stream);
参数
- filename:要打开的文件的名称。
- mode:文件的访问模式,例如 "r" 用于读取,"w" 用于写入,"a" 用于附加等,如下表所示。
- stream:要关联的现有文件流,如 stdin、stdout 或 stderr。
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 文件,而不是屏幕。