当前位置: 首页 > news >正文

C语言文件操作学习笔记

C语言文件操作学习笔记


目录

  • 文件基本概念
  • 文件的打开与关闭
  • 文件的顺序读写
  • 文件的随机读写
  • 常用文件操作函数
  • 总结

文件基本概念

1. 什么是文件?

  • 文件:存储在外部存储器(如硬盘)上的数据集合。
  • 输入输出流:数据像流水一样从一处流向另一处,C语言将文件视为字符(字节)序列。

2. 文件分类

类型特点示例
文本文件以ASCII码形式存储,可读性强.txt, .c
二进制文件以二进制形式存储,节省空间.dat, .exe

3. 文件指针

  • FILE结构体:存储文件的详细信息(如文件名、状态、当前位置等)。
  • 定义文件指针
    FILE *fp;  // fp指向文件缓冲区的首地址
    

4. 文件缓冲区

  • 缓冲文件系统:系统为每个文件开辟内存缓冲区,数据先写入缓冲区,满后再写入外存。

文件的打开与关闭

1. 打开文件:fopen()

FILE *fopen(const char *文件名, const char *打开模式);
文件打开模式
模式说明
"r"只读,文件不存在则失败
"w"只写,文件存在则清空,不存在则创建
"a"追加写,文件不存在则创建
"r+"读写,文件必须存在
"w+"读写,文件存在则清空,不存在则创建
"a+"读与追加写,不存在则创建
"b"二进制模式(需与其他模式组合,如"rb", "wb"
示例:安全打开文件
FILE *fp;
if ((fp = fopen("test.txt", "r")) == NULL) {
    printf("无法打开文件!\n");
    exit(0);  // 终止程序
}

2. 关闭文件:fclose()

int fclose(FILE *fp);  // 成功返回0,失败返回EOF(-1)

文件的顺序读写

1. 字符读写函数

函数功能示例
fputc(c, fp)写入一个字符到文件fputc('A', fp);
fgetc(fp)从文件读取一个字符char c = fgetc(fp);
示例:复制文件内容
#include <stdio.h>
int main() {
    FILE *in = fopen("input.txt", "r");
    FILE *out = fopen("output.txt", "w");
    char c;
    while ((c = fgetc(in)) != EOF) {
        fputc(c, out);
    }
    fclose(in);
    fclose(out);
    return 0;
}

2. 字符串读写函数

函数功能示例
fgets(s, n, fp)从文件读取字符串(最多读n-1字符)fgets(buffer, 100, fp);
fputs(s, fp)将字符串写入文件fputs("Hello World", fp);

文件的随机读写

1. 文件指针定位函数

函数功能示例
fseek(fp, offset, 起始位置)移动文件指针到指定位置fseek(fp, 100L, SEEK_SET);
rewind(fp)将文件指针重置到文件开头rewind(fp);
ftell(fp)返回当前指针位置(字节数)long pos = ftell(fp);
起始位置常量
  • SEEK_SET(0):文件开头
  • SEEK_CUR(1):当前位置
  • SEEK_END(2):文件末尾

2. 示例:随机读取学生数据

#include <stdio.h>
struct Student {
    char name[20];
    int age;
};

int main() {
    FILE *fp = fopen("students.dat", "rb");
    struct Student s;
    // 读取第3个学生的数据(索引从0开始)
    fseek(fp, 2 * sizeof(struct Student), SEEK_SET);
    fread(&s, sizeof(struct Student), 1, fp);
    printf("姓名:%s,年龄:%d\n", s.name, s.age);
    fclose(fp);
    return 0;
}

常用文件操作函数

1. 数据块读写函数

函数功能示例
fread(buffer, size, count, fp)从文件读取数据块fread(&stu, sizeof(Student), 1, fp);
fwrite(buffer, size, count, fp)向文件写入数据块fwrite(&stu, sizeof(Student), 1, fp);

2. 文件结束判断:feof()

while (!feof(fp)) {  // 循环直到文件结束
    // 读取操作
}

总结

关键知识点

  1. 文件操作步骤:打开 → 操作 → 关闭。
  2. 打开模式"r""w""a"等需根据需求选择。
  3. 顺序读写:逐个字符或字符串处理。
  4. 随机读写:通过fseek定位指针,直接访问任意位置。
  5. 二进制文件:适合存储结构体等复杂数据。

注意事项

  • 错误处理:始终检查文件是否成功打开。
  • 缓冲区刷新:关闭文件前确保数据写入外存。
  • 指针管理:避免越界操作导致数据损坏。

练习题:编写程序,从键盘输入5个学生的信息(姓名、年龄),保存到文件students.dat中,并读取第3个学生的信息显示在屏幕上。

相关文章:

  • 云计算中的API网关是什么?为什么它很重要?
  • 使用Dify将AI机器人嵌入到你的前端页面中及chrome的扩展应用
  • 【个人总结】8. Qt和LVGL 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • 输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE 项目-全局模糊检索
  • 搜索引擎快速收录:关键词布局的艺术
  • 保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek
  • 【异步编程解析】
  • spring学习(spring容器、加载配置文件方式、获取bean的方式)
  • mac开发环境配置笔记
  • GO大模型应用开发框架-
  • 网络安全防护
  • Unity学习part4
  • SQLMesh 系列教程7- 详解 seed 模型
  • 第29篇 基于ARM A9处理器用C语言实现中断<五>
  • LeetCode - 21 合并两个有序链表
  • 板块一 Servlet编程:第十节 监听器全解 来自【汤米尼克的JAVAEE全套教程专栏】
  • 【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(8-15)
  • ac的dhcp池里option43配错导致ap无法上线问题排查过程
  • 修改Linux下kernel里ramdisk.img教程
  • 机器学习,我们主要学习什么?
  • 国外企业网站怎么做/新软件推广平台
  • 十大免费ppt网站流氓下载/注册网站怎么注册
  • 为什么没有网站做图文小说/花钱推广的网络平台
  • 佛山做网站公司有哪些/seo常见优化技术
  • 购物网站建设和使用/优化大师电脑版官网
  • 网站改版 新闻/郑州网站建设推广优化