C++ Reference: Standard C++ Library reference: C Library: cstdio: freopen

C++官网参考链接:https://cplusplus.com/reference/cstdio/freopen/

函数 

freopen
FILE * freopen ( const char * filename, const char * mode, FILE * stream );
用不同的文件或模式重新打开流
重用stream以打开由filename指定的文件或更改其访问mode。
如果指定了一个新的filename,该函数首先尝试关闭任何已经与stream(第三个形参)相关联的文件并解除关联。然后,与stream是否成功关闭无关,freopen打开filename指定的文件并将其与stream关联起来,就像fopen使用指定的mode所做的那样。
如果filename是空指针,该函数将尝试更改stream的mode。尽管允许特定的库实现限制所允许的更改,以及在何种情况下。
错误指示符和文件结束指示符会自动清除(就像调用clearerr一样)。
这个函数在将诸如stdin、stdout和stderr等预定义流重定向到特定文件时特别有用(参见下面的示例)。

形参
filename 
包含要打开的文件名的C字符串。
它的值应该遵循运行环境的文件名规范,并且可以包含一个路径(如果系统支持)。
如果此形参为空指针,该函数将尝试更改stream的mode,就像使用了当前与该stream关联的文件名一样。
mode
包含文件访问模式的C字符串。它可以是:

"r"

read: Open file for input operations. The file must exist.

(读:打开文件进行输入操作。该文件必须存在。)

"w"

write: Create an empty file for output operations. If a file with the same name already exists, its contents are discarded and the file is treated as a new empty file.

(写:为输出操作创建一个空文件。如果已经存在同名的文件,则丢弃其内容,并将该文件视为新的空文件。)

"a"

append: Open file for output at the end of a file. Output operations always write data at the end of the file, expanding it. Repositioning operations (fseek, fsetpos, rewind) are ignored. The file is created if it does not exist.

(追加:打开文件以便在文件结束输出。输出操作总是在文件结束写入数据,并将其展开。重定位操作(fseek, fsetpos, rewind)将被忽略。如果文件不存在,则创建该文件。)

"r+"

read/update: Open a file for update (both for input and output). The file must exist.

(读/更新:打开一个文件进行更新(用于输入和输出)。该文件必须存在。)

"w+"

write/update: Create an empty file and open it for update (both for input and output). If a file with the same name already exists its contents are discarded and the file is treated as a new empty file.

(写/更新:创建一个空文件并打开它进行更新(用于输入和输出)。如果已经存在具有相同名称的文件,则其内容将被丢弃,并将该文件视为新的空文件。)

"a+"

append/update: Open a file for update (both for input and output) with all output operations writing data at the end of the file. Repositioning operations (fseek, fsetpos, rewind) affects the next input operations, but output operations move the position back to the end of file. The file is created if it does not exist.

(追加/更新:打开一个文件进行更新(包括输入和输出),所有的输出操作都在文件结束写入数据。重定位操作(fseek、fsetpos、rewind)影响下一个输入操作,但输出操作将位置移回文件结束。如果文件不存在,则创建该文件。)

使用上面的模式说明符,文件将作为文本文件打开。为了将文件作为二进制文件打开,模式字符串中必须包含一个"b"字符。这个额外的"b"字符可以被附加在字符串的末尾(因此产生以下复合模式:"rb","wb","ab", "r+b","w+b","a+b"),也可以插入到字母和复合模式的"+"符号之间("rb+","wb+","ab+")。
新的C标准(C2011,它不是C++的一部分)增加了一个新的标准子说明符("x"),它可以被附加到任何"w"说明符(形成"wx", "wbx", "w+x"或"w+bx"/"wb+x")。如果文件存在,此子说明符强制函数失败,而不是覆盖它。
如果附加字符按照顺序出现,则行为取决于库实现:一些实现可能会忽略附加字符,以便例如额外的"t"(有时用于显式地声明文本文件)被接受。
在某些库实现中,使用更新模式打开或创建文本文件可能会将stream视为二进制文件。
stream
指向FILE对象的指针,该对象标识要重新打开的流。

返回值
如果文件被成功重新打开,该函数返回作为形参stream传递的指针,该形参可用于标识重新打开的stream。
否则,返回空指针。
在大多数库实现中,errno变量在失败时也被设置为特定于系统的错误代码。

用例
/* freopen example: redirecting stdout */
#include

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;

这个示例代码将通常到标准输出的输出重定向到一个名为myfile.txt的文件,该文件在这个程序执行后包含:
This sentence is redirected to a file.
输出:

C++ Reference: Standard C++ Library reference: C Library: cstdio: freopen_第1张图片

C++ Reference: Standard C++ Library reference: C Library: cstdio: freopen_第2张图片

另请参考
fopen    Open file (function) (打开文件(函数)) 
fclose    Close file (function) (关闭文件(函数)) 

你可能感兴趣的:(C++,Reference,C,Library,c++,c语言,用不同的文件或模式重打开流,freopen)