fopen
函数 <cstdio>
FILE * fopen ( const char * filename, const char * mode );
打开文件
打开在参数filename中指定名称的文件,并将其与一个流关联起来,
该流可以在以后的操作中由返回的
FILE指针标识。
流上允许的操作以及这些操作的执行方式由mode参数定义。
如果已知返回的流没有引用交互设备(参见
setbuf),则默认将其完全缓冲。
通过调用
fclose
或
freopen,可以将返回的指针与文件解除关联。所有打开的文件自动关闭正常的程序终止。
运行环境至少支持同时打开
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;
}
|
🍄 另请参阅