打开文件和关闭文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开文件和关闭文件相关的知识,希望对你有一定的参考价值。
1 打开文件
在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读、写的文件与磁盘上实际的数据文件联系起来。在 C 语言中这并不困难,只需调用 C 语言提供的库函数 fopen “打开”文件就可实现这些联系。fopen 函数的一般调用形式为:
fopen(文件名,文件使用方式);
函数返回一个指向 FILE 类型的指针。例如:
FILE *fp;
fp = fopen("file_a", "r");
fopen 函数调用中有两个字符串作为参数。第一个字符串中包含了进行读、写操作的文件名,用来指定所要打开的文件。本例中,指定的函数名为:file_a。第二个字符串中指定了文件的使用方式,用户可通过这个参数来指定对文件的使用意图。
若以上函数调用成功,函数返回一个 FILE 类型的指针,赋给文件指针变量 fp,从而把指针 fp与文件 file_a 联系起来。也就是说,在此调用后指针 fp 就指向了文件 file_a。当打开文件时出现了错误,fopen 函数将返回 NULL。为保证在程序中使用正确打开的文件,建议用以下程序段。当在打开文件发生错误时,使程序停止运行:
#include <stdlib.h>
...
if ((pf = fopen("file_a", "r")) == NULL)
{
printf("Cannot open this file !\n");
exit(0); //注意:使用 exit 函数时,必须包含 stdlib.h 头文件
}
C 语言中,最常用的文件使用方式及其含义如下:
(1)“r”。为读而打开文本文件。当指定这种方式时,对打开的文件只能进行“读”操作。若指定的文件不存在,则会出错;另外一些情况,如企图去读一个不允许读的文件时,也会出错。
(2)“rb”。为读而打开一个二进制文件。其余功能与 “r” 相同。
(3)“w”。为写而打开文本文件。如果指定的文件不存在,系统将用在 fopen 调用中指定的文件名建立一个新文件;如果指定的文件已存在,则将从文件的起始位置开始写,文件中原有的内容将全部消失。
(4)“wb”。为写而打开一个二进制文件。可以在指定文件位置进行写操作,其余功能与 “w” 相似。
(5)“a”。为在文件后面添加数据而打开文本文件。如果指定的文件不存在,系统将用在 fopen 调用中指定的文件名建立一个新文件;如果指定的文件已存在,则文件中原有的内容将保存,新的数据写在原有内容之后。
(6)“ab”。为在文件后面添加数据而打开一个二进制文件。其余功能与 “a” 相同。
(7)“r+”。为读和写而打开文本文件。用这种方式时,指定的文件应当已经存在,既可以对该文件进行读,也可以对该文件进行写,在读和写操作之间不必关闭文件。只是对于文本文件来说,读和写总是从文件的起始位置开始。在写新的数据时,只覆盖新数据所占的空间,其后的老数据并不丢失。
(8)“rb+”。为读和写而打开一个二进制文件。功能与 “r+” 相同,只是在读和写时,可以由位置函数设置读和写的起始位置,也就是说不一定从文件的起始位置开始读和写。
(9)“w+”。首先建立一个新文件,进行写操作,随后可以从头开始读。如果指定的文件已存在,则原有的内容将全部消失。
(10)“wb+”。功能与 “w+” 相同,只是在随后的读和写时,可以由位置函数设置读和写的起始位置。
(11)“a+”。功能与 “a” 相同,只是在文件尾部添加新的数据之后,可以从头开始读。
(12)“ab+”。功能与 “a+” 相同,只是在文件尾部添加新的数据之后,可以由位置函数设置开始读的起始位置。
当运行一个 C 程序时,系统将负责自动打开三个文件,这三个文件分别是标准输入文件、标准输出文件和标准出错文件,并规定相应的文件指针为 stdin、sdtout、stderr,它们已在 stdio.h 头文件中进行了说明。通常情况下,stdin 与键盘连接、stdout 和 stderr 与终端屏幕连接。注意:这些指针是常量,不是变量,因此不能重新赋值。
2 关闭文件
当对文件的读(写)操作完成后,必须将它关闭。关闭文件可以调用库函数 fclose 实现,fclose 函数的调用形式如下:
fclose(文件指针);
若 fp 是指向文件 file_a 的文件指针,当执行了 fclose(fp); 之后,若对文件 file_a 的操作方式为“读”方式,则将使文件指针 fp 与文件 file_a 脱离联系。在此之后,可以重新分配文件指针 fp 去指向其他文件。若对文件 file_a 的操作方式为“写”方式,则系统首先把该文件缓冲区中的剩余数据全部输出到文件中,然后使文件指针 fp 和文件 file_a 脱离联系。由此可见,完成对文件的操作后,应当关闭文件,否则文件缓冲区中的剩余数据将丢失。
当成功执行了关闭操作,函数返回0,否则返回非0。
以上是关于打开文件和关闭文件的主要内容,如果未能解决你的问题,请参考以下文章