fopen

Posted eternalmoonbeam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fopen相关的知识,希望对你有一定的参考价值。

来源:http://www.cplusplus.com/reference/cstdio/fopen/


用法:  FILE * fopen ( const char * filename, const char * mode );

简介:

打开在参数file name中指定其名称的文件,并将其与一个流相关联,该流可以在以后的操作中由返回的文件指针标识。
流上允许的操作以及如何执行这些操作由mode参数定义。
如果已知返回的流不引用交互设备,则默认情况下会对其进行完全缓冲(请参阅setbuf)。
返回的指针可以通过调用fclose或freopen与文件解除关联。所有打开的文件在正常程序终止时自动关闭。
运行环境至少支持同时打开fopen_max文件。


 

参数:

filename

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

mode

r
w
a
r+
w+
a+
读取:打开文件进行输入操作。文件必须存在。
写入:为输出操作创建一个空文件。如果已经存在同名的文件,则丢弃其内容,并将文件视为新的空文件。
追加:打开文件,在文件末尾输出。输出操作总是在文件末尾写入数据,并将其展开。重新定位操作(fseek、fsetpos、rewind)将被忽略。如果文件不存在,则创建该文件。
读取/更新:打开文件进行更新(输入和输出)。文件必须存在。
写入/更新:创建一个空文件并打开它进行更新(输入和输出)。如果同名文件已存在,则将丢弃其内容,并将该文件视为新的空文件。
追加/更新:打开一个文件进行更新(包括输入和输出),所有输出操作在文件末尾写入数据。重新定位操作(fseek、fsetpos、rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。

 

 

 

 

 

 

 

 

使用上面的模式说明符,文件将作为文本文件打开。为了将文件作为二进制文件打开,模式字符串中必须包含“B”字符。这个额外的“b”字符可以附加在字符串的末尾(从而形成以下复合模式:“rb”、“wb”、“ab”、“r+b”、“w+b”、“a+b”),也可以插入字母和混合模式的“+”符号(“rb+”、“wb+”、“ab+”)之间。
新的C标准(不是C++的一部分)增加了一个新的标准“x”(“x”),可以附加到任何“W”说明符(形成“0”、“0”、“w”或“W”+“+”)。如果文件存在,此子参数将强制函数失败,而不是重写它。
如果序列后面有其他字符,则行为取决于库实现:有些实现可能会忽略其他字符,以便接受额外的“t”(有时用于显式声明文本文件)。
在某些库实现中,使用更新模式打开或创建文本文件可能会将流视为二进制文件。

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

对于同时允许输入和输出操作的打开更新的文件(包括“+”符号的文件),在执行写入操作之后的读取操作之前,应刷新(fflush)流或重新定位(fseek、fsetpos、rewind)。在读取操作之后的写入操作之前(当该操作未到达文件结尾时),流应重新定位(fseek、fsetpos、rewind)。


返回值:

如果文件已成功打开,则函数返回指向文件对象的指针,该对象可用于在以后的操作中标识流。
否则,返回空指针。
在大多数库实现中,Erro变量也被设置为系统特定的错误代码。

 

以上是关于fopen的主要内容,如果未能解决你的问题,请参考以下文章