文件是相关数据的有序集合,是计算机程序设计中的核心概念之一。在日常计算机使用中,我们本质上是在与各类文件进行交互:
数据管理场景下,可通过在线协作文档(如腾讯文档)或本地电子表格(如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,以避免后续误用该指针(即防止 野指针 问题)。















暂无评论内容