10.2 打开与关闭文件

第10章 对文件的输入输出

10.2 打开与关闭文件

在进行文件读写之前,应该先“打开”文件,在使用结束之后应“关闭”文件。“打开”和“关闭”是形象的说法,就像打开门才能进入房子,关闭门就无法进入一样。实际上,所谓“打开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。在编写程序时,在打开文件的同时,一般都指定一个指针变量指向该文件,也就是建立起指针变量与文件之间的联系,这样就可以通过该指针变量对文件进行读写。所谓“关闭”是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,从而无法进行对文件的读写。

10.2.1 用 fopen 函数打开数据文件

ANSI C规定了用标准输入输出函数 fopen 来实现打开文件。fopen 函数的调用方式为:

FILE *fopen(const char *filename, const char *mode);

例如:

FILE *fp;
fp = fopen("a1.txt", "r");

表示要打开名字为 a1.txt 的文件,使用文件方式为“读入”(r 代表 read,即读入)。fopen 函数的返回值是指向 a1.txt 文件的指针(即 a1.txt 文件信息区的起始地址)。通常将 fopen 函数的返回值赋给一个指向文件的指针变量。

文件使用方式

表 10.1 使用文件方式:

文件使用方式含义如果指定的文件不存在
"r"为了输入数据,打开一个已存在的文本文件出错
"w"为了输出数据,打开一个文本文件建立新文件
"a"向文本文件尾添加数据出错
"rb"为了输入数据,打开一个二进制文件出错
"wb"为了输出数据,打开一个二进制文件建立新文件
"ab"向二进制文件尾添加数据出错
"r+"为了读和写,打开一个文本文件出错
"w+"为了读和写,建立一个新的文本文件建立新文件
"a+"为了读和写,打开一个文本文件出错
"rb+"为了读和写,打开一个二进制文件出错
"wb+"为了读和写,建立一个新的二进制文件建立新文件
"ab+"为了读和写,打开一个二进制文件出错
例子1:打开一个文件并检查是否成功

编写一个C程序,打开一个文件并检查是否成功:

#include <stdio.h>

int main() {
    FILE *fp;
    if ((fp = fopen("example.txt", "r")) == NULL) {
        printf("Cannot open this file\n");
        return 1;
    }
    // 进行文件操作
    fclose(fp); // 关闭文件
    return 0;
}

理解与应用

打开文件的主要目的是为文件读写建立通道,而关闭文件则是撤销这个通道以释放资源。在编写文件操作程序时,必须确保文件被正确打开和关闭,否则可能会导致数据丢失或资源泄漏。

例子2:使用不同模式打开文件

编写一个C程序,演示如何使用不同模式打开文件:

#include <stdio.h>

int main() {
    FILE *fp;

    // 以只读模式打开文件
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("Cannot open file in read mode\n");
    } else {
        printf("File opened in read mode\n");
        fclose(fp);
    }

    // 以写模式打开文件
    fp = fopen("example.txt", "w");
    if (fp == NULL) {
        printf("Cannot open file in write mode\n");
    } else {
        printf("File opened in write mode\n");
        fclose(fp);
    }

    // 以追加模式打开文件
    fp = fopen("example.txt", "a");
    if (fp == NULL) {
        printf("Cannot open file in append mode\n");
    } else {
        printf("File opened in append mode\n");
        fclose(fp);
    }

    return 0;
}

小结

理解和正确使用文件打开和关闭操作是C语言文件处理的基础。通过选择合适的文件模式,可以实现不同的文件操作需求。确保文件被正确关闭可以防止资源泄漏,保证程序的健壮性和可靠性。

10.2.2 用 fclose 函数关闭数据文件

在使用完一个文件后应该关闭它,以防止它再被误用。所谓“关闭”就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。

使用 fclose 函数关闭文件

fclose 函数的调用一般形式为:

int fclose(FILE *stream);

例如:

FILE *fp;
fp = fopen("example.txt", "r");
// 使用文件进行读写操作
fclose(fp);

前面我们将打开文件时 fopen 函数返回的指针赋给了 fp,现在用 fclose 函数关闭 fp 指向的文件,此后 fp 不再指向该文件。

理解与应用

如果不关闭文件就结束程序运行,可能会丢失数据。因为在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果程序在缓冲区未充满时结束运行,就有可能导致缓冲区中的数据丢失。用 fclose 函数关闭文件时,会先把缓冲区中的数据输出到磁盘文件,然后才撤销文件信息区。有些编译系统在程序结束前会自动将缓冲区中的数据写到文件,从而避免数据丢失,但我们还是应当养成在程序终止之前关闭所有文件的习惯。

fclose 函数返回一个值,当成功地执行了关闭操作时,返回值为0;否则返回EOF(-1)。

实际应用中的例子

例子3:正确关闭文件

编写一个C程序,演示如何正确关闭文件,并检查关闭操作是否成功:

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("Cannot open this file\n");
        return 1;
    }
    // 进行文件操作
    if (fclose(fp) != 0) {
        printf("Error closing file\n");
    } else {
        printf("File closed successfully\n");
    }
    return 0;
}

小结

正确关闭文件是确保数据完整性和防止资源泄漏的重要步骤。使用 fclose 函数可以确保缓冲区中的数据被正确写入文件并释放资源,保证程序的稳定运行。在编写涉及文件操作的程序时,养成良好的关闭文件的习惯是非常重要的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值