C语言进阶:文件管理(一)

文件是相关数据的有序集合,是计算机程序设计中的核心概念之一。在日常计算机使用中,我们本质上是在与各类文件进行交互:

数据管理场景下,可通过在线协作文档(如腾讯文档)或本地电子表格(如Excel)高效完成数据采集与整理;创意设计领域,Photoshop等工具则通过对图片文件的编辑实现视觉内容的创作与优化。

一、文件的使用与分类

在计算机中,所有的文件都可以通过流进行输入、输出操作。与文本流和二进制流相对应,文件可以分为文本文件和二进制文件两种主要类别。文本文件也可以叫做ASCII文件,保存每一个字符对应的字节,存放对应的ASCII编码,而二进制文件是按照二进制编码方式存储的。

二、文件的打开和关闭

在C语言中,文件的打开与关闭操作是通过标准库函数来实现的。常用的函数包括 fopen用于打开文件,fclose用于关闭文件。这些函数定义在 <stdio.h> 头文件中,使用它们可以方便地对文件进行读写等操作,是文件处理的基础。

2.1、文件指针



typedef struct {
    short level;
    unsigned flags;
    char fd;
    unsigned char hold;
    short bsize;
    unsigned char* buffer;
    unsigned ar* curp;
    unsigned istemp;
    short token; 
} FILE;

上述就是一个C语言中系统定义的一个结构体类型FILE,编写程序时,可以用它来定义文件指针,如下所示:


FILE *file;

注意:FILE类型的变量比可以用来直接操作文件。FILE类型数据对象的位置是通过库函数来确定的,所以在 C 语言中,只能通过 FILE * 类型的指针来操作文件。

2.2、fopen函数

fopen 是 C 标准库(stdio.h)中用于打开文件并建立文件流的核心函数。通过它,程序可以以不同的模式(如读取、写入、追加等)访问文件,从而实现数据的输入/输出(I/O)操作。

函数原型如下所示:


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

参数:
filename:要打开的文件路径(可以是相对路径或绝对路径)。mode:文件打开模式(如 “r”读取、”w”写入等)。
返回值:
成功时返回指向 FILE类型对象的指针(即文件流指针),用于后续文件操作。失败时返回 NULL(如文件不存在、权限不足等),此时可用 perror()或 strerror(errno)查看错误原因。

文件打开模式(mode)有以下几种:

模式 类型 是否清空文件 文件是否必须存在 适用场景
“r” 文本只读 是​ 读取文本文件
“w” 文本只写 是​ 创建/覆盖文本文件
“a” 文本追加 追加文本到文件末尾
“r+” 文本读写 是​ 读写文本(不截断)
“w+” 文本读写 是​ 读写文本(覆盖)
“a+” 文本读写 读写文本(追加)
“rb” 二进制只读 是​ 读取二进制文件(如图片)
“wb” 二进制只写 是​ 创建/覆盖二进制文件
“ab” 二进制追加 追加二进制数据
“rb+”/ “r+b” 二进制读写 是​ 读写二进制(不截断)
“wb+”/ “w+b” 二进制读写 是​ 读写二进制(覆盖)
“ab+”/ “a+b” 二进制读写 读写二进制(追加)

2.3、fclose函数

在C标准库中,fclose()函数是一个非常重要的函数,用于关闭一个已经打开的文件流。


int fclose(FILE *stream);

fclose()函数用于关闭通过 fopen() 或其他文件打开函数(如 freopen())打开的文件流。关闭文件流是一个重要的步骤,它能够:

确保所有缓冲区中的数据被正确写入文件(尤其是对于以写或追加模式打开的文件),避免数据丢失;释放与文件流相关联的系统资源,如文件描述符,使得其他程序或进程可以访问该文件;维护程序的稳定性和资源的有效管理,防止因未关闭文件而导致的资源泄漏。

参数

stream:指向 FILE 对象的指针,该对象标识了要关闭的文件流。通常是通过 fopen() 函数返回的指针。

返回值

成功时,fclose()返回 0;失败时,返回 EOF(通常是 -1),并可能设置错误指示器(如 errno)。

三、文件打开与关闭操作实例



#include <stdio.h>
 
int main() {
    FILE *file = fopen("你的文件路径", "w"); // 以写入模式打开文件
    if (file == NULL) {
        perror("无法打开文件"); // 返回空指针说明打开失败
        return 1;
    }
 
    // 文件的写入操作
 
    // 关闭文件
    if (fclose(file) == 0) {
        printf("文件已成功关闭。
");
    } else {
        perror("关闭文件时出错");
        return 1;
    }
    
    file = NULL;
    
    return 0;
}

上述代码展示了 C 语言操作文件的基本步骤:

首先,需要定义一个 文件指针(FILE *类型),用于接收 fopen()函数的返回值。fopen()函数用于打开一个文件,并返回一个指向该文件流的指针。如果文件打开失败,则返回 NULL。由于文件可能因各种原因(如文件不存在、权限不足、路径错误等)无法打开,因此 必须检查 fopen()的返回值:
如果返回 NULL,说明文件打开失败,程序应进行错误处理(如打印错误信息并退出)。如果返回非 NULL,说明文件成功打开,可以继续进行后续操作。
一旦文件成功打开,就可以根据打开模式(如 “r”读取、”w”写入、”a”追加等)对文件进行操作。
以 “w”(写入)模式打开:可以向文件写入数据(如果文件已存在,内容会被清空)。以 “a”(追加)模式打开:可以在文件末尾追加数据,而不会覆盖原有内容。以 “r”(读取)模式打开:可以从文件读取数据。
在完成所有文件操作后,必须调用 fclose()关闭文件流,原因如下:
确保所有缓冲区的数据被正确写入磁盘(特别是写入模式时,数据可能暂存在内存缓冲区)。释放系统资源(如文件描述符),避免资源泄漏。防止文件被其他程序访问时出现冲突。
在 fclose()之后,建议将文件指针(file)设置为 NULL,以避免后续误用该指针(即防止 野指针​ 问题)。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容