Home C&C++函数库 c++ 语法 程序源码 Linux C库

fopen

函数  <cstdio>

FILE * fopen ( const char * filename, const char * mode );
打开文件
打开在参数filename中指定名称的文件,并将其与一个流关联起来, 该流可以在以后的操作中由返回的FILE指针标识。

流上允许的操作以及这些操作的执行方式由mode参数定义。
如果已知返回的流没有引用交互设备(参见setbuf),则默认将其完全缓冲。

通过调用fclosefreopen,可以将返回的指针与文件解除关联。所有打开的文件自动关闭正常的程序终止。

运行环境至少支持同时打开FOPEN_MAX文件。

☲  参数


filename
C字符串,包含要打开的文件的名称。
其值应遵循运行环境的文件名规范,并可以包含路径(如果系统支持)。

mode
包含文件访问模式的C字符串。它可以是:
"r" read : 打开文件进行输入操作。文件必须存在。
"w" write : 为输出操作创建一个空文件。如果同名文件已经存在,则其内容将被丢弃, 并将该文件作为一个新的空文件处理。
"a" append : 打开文件并在文件末尾输出。输出操作总是将数据写在文件的末尾, 将其展开。重定位操作(fseek, fsetpos, rewind)被忽略。如果文件不存在,则创建该文件。
"r+" 读取/更新 : 打开一个文件进行更新(用于输入和输出)。文件必须存在。
"w+" 写/更新 : 创建一个空文件并打开它进行更新(用于输入和输出)。 如果同名文件已经存在,则其内容将被丢弃,并将该文件作为一个新的空文件处理。
"a+" append/update:打开一个文件进行更新(包括输入和输出), 将所有的输出操作写入文件的末尾。重定位操作(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”(有时用于显式声明文本文件)。

在某些库实现中,打开或创建具有更新模式的文本文件可能会将流视为二进制文件。

文本文件是包含文本行序列的文件。根据应用程序运行的环境, 在文本模式下的输入/输出操作中可能会发生一些特殊字符转换, 以使它们适应特定于系统的文本文件格式。 尽管在某些环境中不发生转换,并且文本文件和二进制文件的处理方式相同, 但使用相应的模式可以提高可移植性。

对于为了更新而打开的文件(包含“+”符号的文件),在允许输入和输出操作的情况下, 流应该在读取操作之前刷新(fflush)或重新定位(fseek, fsetpos, rewind), 然后再进行写入操作。在读取操作之后的写入操作(当该操作没有到达文件结束时)之前, 流应该被重新定位(fseek, fsetpos, rewind)。


☉  返回值



如果文件被成功打开,该函数将返回一个指向file对象的指针,该对象可用于在以后的操作中识别流。

否则,返回一个空指针。
在大多数库实现中,errno变量也会在出现故障时设置为系统特定的错误代码。

☣  示例



/* fopen example */
#include <stdio.h>
int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt","w");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
}


🍄  另请参阅



freopen 以不同的文件或模式重新打开流(function )
fclose 关闭文件(function )
setbuf 设置流缓冲区 (function )
setvbuf 更改流缓冲区 (function )
tmpfile 打开一个临时文件(function )
tmpnam 生成临时文件名(function )

联系我们 免责声明 关于CandCplus 网站地图