学科分类
目录
C语言

文件的打开与关闭

文件最基本的操作就是打开和关闭,在对文件进行读写之前,需要先打开文件;读写结束之后,要及时关闭文件。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文件内容

点击此处
隐藏目录