头文件:
<cstdio>
声明:
FILE *fopen(const char *filename, const char *mode);
功能:
打开文件
打开一个由参数filename指定的文件,并且将它和一个流关联。该流能够在之后的操作中使用返回值FILE来作识别。
允许如何在该流上面进行操作及其操作方式均由参数mode来指定。
可调用函数fclose或freopen来使返回的FILE文件句柄与流不关联。
当程序终止运行时,所有的文件都会自动关闭。
运行环境支持至少FOPEN_MAX个文件同时打开,FOPEN_MAX在任何系统上应该大于7。
参数:
filename
包含要打开文件的文件名字。
它的值应该遵循运行环境的文件命名规则并且能够包含一个路径名(如果系统支持的话)。
mode
包含文件访问模式,可以是如下几种:
"r":read:由于输入操作而打开文件。文件必须已经存在。
"w":write:由于输出操作而创建一个空文件。如果有一个相同文件名的文件已经存在,则它的内容会被丢弃且该文件会被认为是一个新的空文件。
"r+":read/update:由于更新而打开一个文件(既可以是输入也可是输出)。改文件必须已经存在
"w+":write/update:创建一个空文件且由于更新打开它(既可以是输入也可以是输出),如果有一个相同文件名的文件已经存在,则它的内容会被丢弃且该文件会被认为是一个新的空文件。
"a+":append/update:由于更新而打开一个文件(既可以是输入也可以是输出),且所有的输出操作写入的数据在文件结尾处。重置位操作(fseek,fsetpos,rewind)影响下一个输入操作,但是输出操作移动位置到文件结尾处。如果文件不存在则创建它。
以上mode所指定的文件模式打开的文件都是txt文件。如果要打开二进制文件,则还需要在mode字符串中加一个"b"。这个附加的"b"字符既可以追加到字符串的结尾(因此会出现这些组合:"rb","wb","ab","r+b","w+b","a+b")h或者插入到字母中间以"+"号做连接("rb+","wb+","ab+")
在新的C标准(C2011,还不是C++的一部分)添加了新的标准子描述符("x"),能够附加到任何有"w"的描述符中(形成"wx","wbx","w+x"或者"w+bx"/"wb+x")。如果文件已经存在,该子描述符会使该函数失败,而不是重写覆盖它。
如果附加字符遵循顺序,依赖于库的行为将会是:
一些实现可能忽略附加字符以至于比如会需要一个附加字符"t"(有时用于text文件)
在一些库实现上,带update模式打开或创建一个text文件可能将该流视为一个二进制文件。
Text文件是包含文本行顺序的文件。依赖于APP运行的环境,一些特殊字符转换可能在text文件和二进制文件中的输入或输出操作中发生,为了匹配特定系统text文件格式。尽管在一些系统上不会发生转换并且text文件和二进制文件被同等对待,都使用合适的模式改善移植性。
对于那些由于更新而打开的文件而言(带+号的模式),运行的操作既可以输入也可以输出,在写操作之后,读操作之前应该刷新(fflush)或者重定位(fseek,fsetpos,rewind)该流。该流应该在读操作(无论何时该操作都不应该到达文件结尾处)之后,写操作之前被重定位(fseek,fsetpos,rewind)。
返回值:
若文件成功打开,该函数返回一个指针到FILE对象,并且在随后的使用中可用来表示该流。
否则,返回一个Null指针。
在大多数库实现中,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;
}
结果: