文件的打开与关闭
文件最基本的操作就是打开和关闭,在对文件进行读写之前,需要先打开文件;读写结束之后,要及时关闭文件。C语言提供了fopen()函数与fclose()函数用于打开和关闭文件,下面将针对这两个函数进行详细讲解。
1、fopen()函数
操作文件之前首先要打开文件。C语言提供了fopen()函数用于打开文件,fopen()函数声明如下:
FILE* fopen(const char* filename,const char* mode);
上述函数声明中,返回值类型FILE*表示该函数返回值为文件指针类型;参数filename用于指定文件的绝对路径,即包含路径名和文件的扩展名;参数mode用于指定文件的打开模式。
文件打开模式就是指以哪种形式打开文件,例如只读模式、只写模式。文件打开模式具体如表1所示。
表1 文件打开模式
打开模式 | 名称 | 描述 |
---|---|---|
r/rb | 只读模式 | 打开一个文件文件/二进制文件,只允许读取数据,文件不存在时打开失败,返回NULL。 |
w/wb | 只写模式 | 创建一个文本文件/二进制文件,只允许写入数据,如果文件已存在,则覆盖旧文件。 |
a/ab | 追加模式 | 打开一个文本文件/二进制文件,只允许在文件末尾添加数据,如果文件不存则创建新文件。 |
r+/rb+ | 读取/更新模式 | 打开一个文本文件/二进制文件,允许进行读取和写入操作,文件不存在时打开失败,返回NULL。 |
w+/wb+ | 写入/更新模式 | 创建一个文本文件/二进制文件,允许进行读取和写入操作,如果文件已存在,则重写文件。 |
a+/ab+ | 追加/更新模式 | 打开一个文本文件/二进制文件,允许进行读取和追加操作,文件不存在则创建新文件。 |
文件正常打开时,fopen()函数返回该文件的文件指针;文件打开失败,该函数返回NULL。示例代码如下。
FILE * fp;
fp = fopen("D:\\test.txt", "r");
if(fp == NULL) //如果文件打开失败,如不存在test.txt文件,返回值是NULL
{
printf("打开失败!\n");
exit(0); // 退出程序
}
上述代码中,首先定义了一个文件指针fp,然后调用fopen()函数打开文件,即将文件与指针fp关联起来,由fopen()函数的参数可知,该函数以只读模式打开了D:\test.txt文件,表示只能读取文件D:\test.txt中的内容而不能向文件中写入数据。
打开文件之后,为保证文件打开正确,使用一个if条件语句判断fp指针是否为空,如果为空表示文件打开失败,则输出错误信息,退出程序。
需要注意的是,mode参数为char *类型,在实际开发过程中必须使用字符串的形式,如果将字符串“r”写成字符‘r’就会使程序出现错误。
2、fclose()函数
打开文件之后可以对文件进行相应操作,文件操作结束后要关闭文件。关闭文件是释放缓冲区和其他资源的过程,不关闭文件会耗费系统资源。C语言提供了fclose()函数用于关闭文件,fclose()函数声明如下:
int fclose(FILE* fp);
上述函数声明中,返回值类型int表示该函数返回值为整型,如果成功关闭文件就返回0,否则返回EOF。参数fp表示打开文件时返回的文件指针。
下面通过一个简单案例来学习文件的打开和关闭操作,如例1所示。
例1 file.c
1 #define _CRT_SECURE_NO_WARNINGS
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main()
4 {
5 FILE* fp; // 定义文件指针变量
6 fp = fopen("hello.txt", "w"); // 打开文件,若文件不存在则创建文件
7 if (fp == NULL) // 如果文件打开失败,打印提示信息
8 {
9 printf("无法打开hello.txt\n");
10 exit(0); // 退出程序
11 }
12 fputs("Hello, world!\n", fp); // 向文件中写入一个字符串
13 fclose(fp); // 关闭当前文件
14 printf("文件写入成功\n");
15 return 0;
16 }
例1运行结果如图1所示。
图1 例1运行结果
在例1中,第5行代码定义一个文件指针变量fp;第6行代码调用fopen()函数打开hello.txt文件;第12行代码调用fputs()函数向该文件写入“Hello, world!”;第13行代码调用fclose()函数关闭文件。
fputs()函数是文件写入函数,这里读者只需要知道fputs()函数表示向文件中写入一个字符串即可,后面将对其进行详细讲解。
程序运行成功后,会在当前项目根目录下生成一个hello.txt文件,打开文件,其内容如图2所示。
图2 hello.txt文件内容