网站建设微享互动,营销方案总结,电子产品开发流程8个步骤,做招聘网站的怎么引流求职者在 C 语言开发中#xff0c;文件读写是不可或缺的核心技能 —— 无论是处理配置文件、存储用户数据#xff0c;还是实现日志功能#xff0c;都离不开对文件的操作。今天这篇笔记#xff0c;会从文件操作的基本概念入手#xff0c;逐步拆解打开、关闭、读写文件的关键函数文件读写是不可或缺的核心技能 —— 无论是处理配置文件、存储用户数据还是实现日志功能都离不开对文件的操作。今天这篇笔记会从文件操作的基本概念入手逐步拆解打开、关闭、读写文件的关键函数并结合实战代码演示帮你彻底掌握 C 语言文件读写的精髓一、文件读写前必知文件指针与打开模式 在 C 语言中所有文件操作都围绕文件指针FILE *展开它就像 “文件的身份证”记录着文件的位置、状态等关键信息。使用前需先通过fopen()函数打开文件并获取指针而打开模式决定了文件的操作权限常见模式如下打开模式含义适用场景r只读打开文件必须存在读取配置文件、日志文件w只写打开文件不存在则创建存在则清空新建 / 覆盖写入文件如输出结果a追加写入文件不存在则创建存在则在末尾追加记录日志、累加数据r读写打开文件必须存在可修改内容编辑已有文件w读写打开文件不存在则创建存在则清空新建可读写文件a读写打开文件不存在则创建写操作只能追加边读边追加数据二、核心函数拆解打开→读写→关闭 文件操作的流程遵循 “打开→操作→关闭” 的逻辑任何环节出错都可能导致文件损坏或数据丢失下面逐个讲解关键函数。1. 打开文件fopen()函数原型FILE *fopen(const char *filename, const char *mode);作用按指定模式打开文件返回文件指针若失败如路径错误、权限不足返回NULL。注意打开文件后必须判断指针是否为NULL避免后续操作崩溃示例代码打开一个文本文件#include stdio.hint main() {// 以只读模式打开当前目录下的 test.txtFILE *fp fopen(test.txt, r);// 判断文件是否成功打开if (fp NULL) {printf(文件打开失败❌\n);return 1; // 失败退出}printf(文件打开成功✅\n);// 后续操作...// 关闭文件关键避免内存泄漏fclose(fp);return 0;}2. 关闭文件fclose()函数原型int fclose(FILE *stream);作用关闭已打开的文件释放文件指针占用的资源成功返回0失败返回EOF-1。注意文件使用完后必须关闭若程序异常退出未关闭可能导致数据未写入磁盘或文件损坏。3. 文本文件读写常用函数对比文本文件读写主要有两类函数按字符读写适合逐字符处理和按行读写适合批量处理具体用法如下1按字符读写fgetc() fputc()fgetc(fp)从文件指针fp指向的文件中读取一个字符返回该字符的 ASCII 值若读到文件末尾返回EOF。fputc(ch, fp)将字符ch写入文件指针fp指向的文件成功返回该字符失败返回EOF。示例复制一个文本文件#include int main() {// 打开源文件只读和目标文件只写不存在则创建FILE *src fopen(source.txt, r);FILE *dest fopen(destination.txt, w);if (src NULL || dest NULL) {printf(文件打开失败❌\n);return 1;}int ch; // 注意用int接收fgetc()避免EOF-1与char的255冲突// 逐字符读取源文件直到末尾while ((ch fgetc(src)) ! EOF) {fputc(ch, dest); // 逐字符写入目标文件}printf(文件复制完成✅\n);// 关闭文件fclose(src);fclose(dest);return 0;}2按行读写fgets() fputs()fgets(buf, n, fp)从文件中读取一行字符存入缓冲区buf最多读取n-1个字符最后留\0若读到换行符或文件末尾停止读取返回buf地址失败返回NULL。fputs(buf, fp)将缓冲区buf中的字符串不含\0写入文件成功返回非负值失败返回EOF。示例读取文件内容并打印同时追加一行数据#include #include int main() {char buf[1024]; // 定义缓冲区存储一行数据FILE *fp fopen(test.txt, a); // 读写模式可追加if (fp NULL) {printf(文件打开失败❌\n);return 1;}// 先读取文件原有内容需将文件指针移到开头a模式默认在末尾rewind(fp); // 移动指针到文件开头printf(文件原有内容\n);while (fgets(buf, sizeof(buf), fp) ! NULL) {printf(%s, buf); // 打印每行内容fgets会读取换行符}// 追加一行数据char new_data[] This is new content!\n;fputs(new_data, fp);printf(数据追加完成✅\n);fclose(fp);return 0;}4. 二进制文件读写fread() fwrite()二进制文件如图片、音频、自定义结构体数据无法用文本函数读写需用fread()和fwrite()按 “块” 操作数据。fread(buf, size, count, fp)从文件中读取count个大小为size的 “块”存入buf返回实际读取的块数若小于count可能到末尾或出错。fwrite(buf, size, count, fp)将buf中count个大小为size的 “块” 写入文件返回实际写入的块数若小于count表示写入失败。示例将结构体数据写入二进制文件再读取出来#include 定义一个结构体存储学生信息typedef struct {char name[20];int age;float score;} Student;int main() {Student stu1 {Zhang San, 20, 95.5};Student stu2; // 用于存储读取的数据FILE *fp fopen(students.bin, wb); // 二进制读写模式if (fp NULL) {printf(文件打开失败❌\n);return 1;}// 写入结构体数据1个块大小为Studentint write_count fwrite(stu1, sizeof(Student), 1, fp);if (write_count 1) {printf(结构体写入成功✅\n);} else {printf(结构体写入失败❌\n);fclose(fp);return 1;}// 移动指针到文件开头准备读取rewind(fp);// 读取结构体数据int read_count fread(stu2, sizeof(Student), 1, fp);if (read_count 1) {printf(读取到的学生信息\n);printf(姓名%s\n年龄%d\n分数%.1f\n, stu2.name, stu2.age, stu2.score);} else {printf(结构体读取失败❌\n);}fclose(fp);return 0;}三、避坑指南文件读写常见错误及解决方法 ⚠️文件打开失败返回 NULL检查文件路径是否正确相对路径是相对于程序运行目录不是代码文件目录检查文件权限如只读文件用w模式打开会失败检查磁盘空间是否充足创建新文件时。读取到乱码或数据错误文本文件确保读写模式与文件类型匹配如二进制文件用文本模式读会乱码二进制文件确保fread()/fwrite()的size和count参数正确与结构体大小一致。数据未写入文件忘记关闭文件fclose()会强制刷新缓冲区未关闭可能导致缓冲区数据未写入磁盘缓冲区未刷新可手动调用fflush(fp)强制刷新但尽量用fclose()。文件指针位置错误读写切换时需用rewind(fp)移到开头、fseek()指定位置或ftell()获取当前位置调整指针避免读写位置混乱。四、总结C 语言文件读写的核心是 “指针 函数 模式”用fopen()打开文件获取文件指针务必判断是否为NULL根据文件类型文本 / 二进制选择对应的读写函数fgetc/fputs 或 fread/fwrite操作完成后用fclose()关闭文件释放资源注意处理边界情况如文件末尾、操作失败避免程序崩溃或数据丢失。掌握这些内容后你就能轻松应对 C 语言开发中的文件操作场景啦如果有疑问欢迎在评论区留言讨论