C语言文件操作详解:从打开到读写函数全攻略

咖啡半糖
咖啡半糖
发布时间:2026-10-15 | 4人浏览过
原创

C语言通过标准库stdio.h提供完善的文件处理能力,核心在于使用FILE*指针作为操作媒介。掌握文件打开模式的选择,并熟练运用字符、字符串及二进制读写函数,是实现数据持久化的基础。

准备环境与文件打开

进行任何文件操作前,需包含头文件#include <stdio.h>并定义一个文件指针变量来管理目标文件,例如:FILE *fp;

打开文件主要依赖fopen函数。成功时返回指向该文件的文件指针,失败则返回NULL。建议的打开方式如下:

FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
    perror("fopen");
    return 1;
}

第1步:选择正确的访问模式

目的:明确程序对文件的读、写或追加权限,区分文本与二进制格式。

常见模式说明:

  • 文本文件:"r"只读;"w"写入(覆盖原内容);"a"追加(保留原内容并从末尾添加);"r+"/"w+"/"a+"支持同时读写。
  • 二进制文件:以“b”结尾的模式(如"rb", "wb", "ab")。适用于图片、音频或非ASCII编码的结构体数据,能确保字节级精确读取和写入。

字符与文本流读写

对于纯文本处理,C语言提供了针对不同粒度的读写接口。下面展示将字符' a'到'z'写入文本文件的具体操作:

第2步:逐字符写入

入口:fputc函数。

动作:将单个字符写入指定的文件流中。参数为待写入字符及文件指针。

示例:

#include<stdio.h>
int main()
{
    FILE* pf = fopen("test.txt.txt", "w");
    if (pf == NULL) { perror("fopen"); return 1; }
    
    char ch;
    for (ch = 'a'; ch <= 'z'; ch++)
    {
        fputc(ch, pf);
    }
    fclose(pf);
    pf = NULL;
    return 0;
}

第3步:逐字符读出与完整字符串操作

目的:恢复文件内容或进行整行/整句级的文本交互。

动作:使用fgetc循环读取至EOF;使用fputs输出字符串,或使用fgets安全读取一行以避免缓冲区溢出。

结果展示:

结构化数据的格式化读写

当需要保存具有特定逻辑结构的对象(如学生信息)时,格式化输入输出函数最为适用。fprintf按指定格式写入文件,fscanf则根据格式符解析文件内容。

第4步:结构体的格式化持久化

入口:struct s结构体定义与fprintf/fscanf调用。

重要参数:格式控制符需与成员类型匹配(如姓名用%s,年龄用%d,成绩用%lf)。注意fscanf取地址。

// 写入结构体
fprintf(pf, "%s %d %lf", s.name, s.age, s.score);
// 读取结构体
fscanf(pf, "%s %d %lf", s.name, &(s.age), &(s.score));

完成状态检查:

二进制数据的高效读写

对于大型数组、图像或需要严格保留内存布局的场景,应跳过文本转换,直接使用fwrite和fread函数。它们直接操作内存字节流。

第5步:批量二进制块读写

入口:fwrite(buffer, size, count, stream)。

动作:将count个大小为size的对象从内存复制到文件。同样,读取时对应使用fread。

注意:由于是底层二进制写入,文件内容不可直接阅读,但效率极高且无格式损耗。

以上就是C语言文件操作与相关函数介绍的详细内容,更多关于C语言文件操作的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表