在平常学习中,有个很头疼的问题,就是每次程序运行时计算出的数据,在程序结束后也消失了,那如何才能将数据存储起来,通常企业里会使用数据库来实现,但今天我来介绍一种更简单易懂的方法,将数据放在磁盘文件里 《文件操作》

  • 什么是文件

文件有程序文件 和数据文件两种

一般后缀为 .c   .h    .obj    .exe  这种就是程序文件

而程序运行时读写的数据 而生成的文件 就是数据文件

而本文主要讨论的是 《数据文件》

  • 文件名

下面我们先认识下 什么是文件名 文件名的格式

c:\code\test.txt

文件路径 (c:\code\) 文件名主干(test)  文件后缀(txt)

  • 文件的打开和关闭

在C语言中,对文件操作之前 是需要对文件打开和关闭的

打开文件                                               读写文件                                                             关闭文件

在学习打开关闭文件之前   我们得先知道 文件指针的概念

在C语言中 打开文件后 会在内存中创建一个结构体变量 FILE f

这种结构体里有着 文件名;文件状态....等等文件信息 所以这个结构体又称文件信息区

所以如果我们想操作这个文件 就必须使用 文件指针 FILE*pf  

那如何打开 关闭文件呢?我们会使用到这两个函数

规定        fopen函数 打开文件

                fclose函数 关闭文件 

filename 文件名         mode 文件打开方式

"r" read        "w" write        "a" append  (追加)      "r+" read/update

"w+"             "a+"                "rb"  (二进制)           "wb"

下面我们来操作一下 如何打开关闭文件

//打开文件FILE* pf = fopen("test.txt","w");// 可能会打开失败 会返回一个空指针if(NULL == pf){perror("fopen");return 1;}//使用//关闭文件fclose(pf);pf = NULL;

现在我们学会了如何打开 关闭文件 那如何操作使用文件呢?

操作使用文件又称 读写文件 而读写文件有着两种方式

1.顺序读写

2.随机读写

  • 文件的顺序读写

我们会使用到这些函数

fgetc        fgets        fscanf        fread        输入函数

fputc        fputs        fprintf        fwrite        输出函数

有人可能问了 什么是所有输入流? 所以输出流?

先拿我们最为熟悉的 printf scanf 函数入手

printf 函数

内存 ——> 屏幕 (输出)

scanf函数

键盘 ——> 内存 (输入)

说明这里的 “入” “出”是相对于 内存的

而键盘 屏幕是什么呢  是标准输入输出流(stdin/stdout)

由此可见 内存的对象  既是所有输入输出流 可以是文件 外部设备 网络等等

fputc函数

内存 ——> 文件 (输出)

fgetc函数

文件 ——> 内存 (输入)

fputs函数

内存 ——> 文件 (输出)

fgets函数

文件 ——> 内存 (输入)

而 fprintf 格式化输入函数 可以这样写

fprintf(stdin,...) 等价于 printf 

题外话

sprintf(是把格式化的数据写到字符串中)

sscanf(是从字符串读取格式化的数据)

  • 文件的随机读写

我们会用到 这些函数

fseek 函数

ftell 函数

rewind 函数

fseek

可以根据偏移量 来移动文件指针 

ftell

rewind         让文件指针的位置回到文件的起始位置

  • 文本文件和二进制文件

在日常生活中我们经常发现 有的文本文件里是 我们看得懂的 文字 而有的文件里是写着 乱七八糟的 乱码 这就是文本文件和二进制文件

数据在内存中以二进制的形式存储 ——> 如果不加转化输出到外存 ——> 即是 二进制文件

数据在内存中以二进制的形式存储 ——> 转化成对应ASCII码的形式存储 ——> 即是 文本文件

千万别根据文件后缀 或其他东西来判断文件是文本文件还是 二进制文件

唯一标准 以内容来确定文件是什么类型文件 文本还是二进制

  • 文件读取结束的判定

切记 feof(); 函数 并非是 对文件读取结束判定的函数

而是 文件读取结束时 判断时读取失败结束,还是文件末尾结束

EOF end of file 被错误使用的feof

《不能用feof函数的返回值 直接用来判断文件是否结束》

fgetc函数 如果读取正常 会返回读取到字符的ASCII值

如果读取失败 返回EOF

fgets函数 如果读取正常 会返回读取到字符串的地址

如果读取失败 返回空指针NULL

fscanf函数 如果读取正常 会返回格式串中指定的数据的个数

如果读取失败 返回的是小于格式串中指定的数据的个数

fread函数 如果读取正常 会返回是实际要读的个数

如果读取失败 返回小于实际要读的个数

  • 文件缓冲区

在ANSIC (标准C)中规定 存在一种“缓冲文件系统”

内存每次呈递数据给硬盘 由操作系统OS来实现 一个一个来给 太低效了 于是出现缓冲区 等缓冲区符合上交条件 再一次性提交到硬盘或内存

因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

总结

以上就是文件操作的所有内容了 你的点赞是我创作的动力 感谢你的观看

如何搞定C语言的文件操作相关推荐

  1. python 如何判断一个函数执行完成_三步搞定 Python 中的文件操作

    当程序运行时,变量是保存数据的好方法,但变量.序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中. Python 提供了内置的文件对象,以及 ...

  2. 【零基础搞定C语言——导航汇总篇】

    声明:C语言初阶和进阶全部笔记已更新结束,初阶部分适合零基础同学阅读,进阶部分是建立在初阶基础之上的深入.由于作者水平有限,本文难免有错误和不准确之处,本人也很想知道这些错误,恳望读者批评指正,大家一 ...

  3. c语言数据文件是,C语言数据文件操作.ppt

    C语言数据文件操作 第十一章 文件 11.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 ...

  4. linux下c语言读写文件操作,linux下的系统级c语言文件读写操作

    最近初次接触Linux这么高端的东西,有种进城的感觉.进了linux,发现城里人说话做事的方式都很不一样. 个人感觉,初次接触linux主要的痛点在于命令行交互的方式,这就要求我接受城里人的思维,wh ...

  5. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )

    文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...

  6. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )

    文章目录 一.文件名路径设置 二.文件打开方式 三.fputc 函数 | 按照字符方式写文件 1.fputc 函数 2.代码示例 四.fgetc 函数 | 按照字符方式读文件 1.fgetc 函数 2 ...

  7. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  8. 【C 语言】文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )

    文章目录 一.stat 统计文件大小 二.feof 判定文件结尾 三.使用 fread 和 fwrite 实现二进制文件的拷贝 一.stat 统计文件大小 统计文件大小 , 需要借助 stat 结构体 ...

  9. c读取ini配置文件_Go-INI - 超赞的Go语言INI文件操作库

    INI 文件(Initialization File)是十分常用的配置文件格式,其由节(section).键(key)和值(value)组成,编写方便,表达性强,并能实现基本的配置分组功能,被各类软件 ...

最新文章

  1. 理解MVC—从实例出发:基于MVC模式的简易算术计算器
  2. python编写函数、计算三个数的最大公约数_Python实现利用最大公约数求三个正整数的最小公倍数示例...
  3. php统计变量的位数,php实现统计二进制中1的个数算法示例
  4. 树上倍增一些理解和写法
  5. es使用pencentiles对网站访问延时统计
  6. byte 类型比较_基本类型和包装类对象使用 == 和 equals进行比较的结果?
  7. java替换最后一个字符_Excel公式技巧23: 同时定位字符串中的第一个和最后一个数字...
  8. AttributeError: 'dict' object has no attribute 'iteritems' .iteritems(): 修改为items()
  9. tar 打包压缩与解压缩
  10. css写字体浮雕效果,使用CSS3的text-shadow制作浮雕文字阴影和多重文字阴影效果-网站程序网...
  11. vue+drf没公网ip接入支付宝功能
  12. smartforms设备类型CNSAPWIN不支持页格式ZXXX
  13. ActionContext.getContext()的几种用法
  14. 多线程基础(十三):java中的FutureTask
  15. a 标签实现文件下载(解决打开的问题)
  16. 2022电大国家开放大学网上形考任务-会计学概论非免费(非答案)
  17. ZT:老郭的《闷坐无聊偶感于怀》,力挺老郭
  18. 游戏性的根本——浅谈游戏关卡设计
  19. 学习日志[自我监督与复习用]
  20. DellOptiPlex 5060台式机WinServer2012系统安装网卡驱动回顾

热门文章

  1. 修改CS、IP寄存器的指令
  2. 纪录片《Code Rush》youku
  3. Mac 版本的java安装流程
  4. Python None 值
  5. AKS集群蓝绿部署实现版本升级(下篇)
  6. java大文件内容匹配_Java在一个文件中匹配字符串
  7. html中单选按钮居中代码,Html单选按钮自定义样式(示例代码)
  8. 计算机的硬件的发展,计算机的硬件发展.doc
  9. 国密算法SSL安全通道Tomcat9的配置,适配360国密浏览器,密信国密浏览器,海泰红莲花国密浏览器
  10. EXCEL中设置后面单元格的数据由前面单元格的数据带出