C 语言文件操作详解
程序运行时,变量、数组中的数据保存在内存当中,一旦程序关闭或者断电,内存数据会立刻消失。如果想要长久保存数据,就需要将数据写入磁盘文件;后续使用时再从文件读取到内存,这一整套操作就是文件读写。C 语言依靠标准库函数实现文件操作,相关函数均定义在 <stdio.h> 头文件中。
C 语言操作文件的核心载体是文件指针 FILE*。FILE 是系统封装好的结构体,记录文件读写位置、缓冲区、文件状态等信息。打开文件使用 fopen 函数,函数参数包含文件路径与打开模式。打开文件后必须判断文件指针是否为 NULL,如果文件不存在、权限不足都会打开失败,不做判断直接读写会引发程序崩溃。
文件打开模式分为文本模式与二进制模式。常用模式:r 只读、w 清空写入、a 追加写入、r + 读写。在 Windows 系统下,文本模式会自动转换换行符;二进制模式不会处理换行符号,原样读写数据。读取图片、视频、自定义结构体数据时,必须选用二进制模式,推荐使用 rb、wb、ab 这类带 b 的模式,避免数据被错误转换造成损坏。
文件读写分为单字符读写、字符串读写、块读写。fgetc、fputc 完成单个字符读写;fgets、fputs 实现一行字符串操作;fread 与 fwrite 用于整块数据读写,非常适合结构体、数组批量保存,是数据持久化常用函数。
很多新手读写文件时不知道如何判断读取结束,可以使用 feof 检测文件末尾,但需要留意使用时机。更稳妥的方式依靠读取函数返回值判断。同时文件内部存在读写位置指针,顺序读写时指针自动向后移动;如果想要自由跳转到指定位置读写,可以使用 fseek 移动文件指针,ftell 获取当前偏移量,rewind 将指针重置到文件开头。
一个极易遗忘的重点:文件使用完成后必须调用 fclose 关闭文件。操作系统能够打开的文件数量存在上限,持续打开不关闭会造成文件资源泄漏。fclose 执行时,系统会把缓冲区数据刷新写入磁盘,如果缺少关闭操作,部分数据可能滞留在缓冲区,最终文件内容缺失。
缓冲区是文件操作的重要概念。为减少频繁磁盘 IO 损耗,操作系统设立缓冲区,程序写入数据优先存入缓冲区,缓冲区满、主动刷新或者关闭文件时,数据才真正保存到硬盘。使用 fflush 可以主动刷新缓冲区。
文件操作常见实战场景:简易日志系统、成绩数据保存、配置文件读写。编写文件读写代码时,务必做好容错处理,判断打开状态、捕获读写异常。
掌握文件操作之后,程序不再局限于简单控制台交互,可以实现数据持久化,开发小型本地工具软件。无论是学习阶段的小项目,还是嵌入式设备保存参数,文件读写都是必备能力。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)