【C语言】文件操作必知必会
一、前言
程序运行时,数据是在内存中存放的,而当程序退出后,数据也将不复存在。
如果想做到数据持久化,可以把数据存放在磁盘文件,或者存放到数据库。
学会文件操作,我们就可以将数据存放在电脑的硬盘上,实现数据的持久化。
二、何为文件
在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。
1. 程序文件
源程序文件(后缀为.c)
目标文件(windows环境后缀为.obj)
可执行文件(windows环境后缀为.exe)
2. 数据文件
程序运行时,要从中读写数据的文件
3. 文件名
通常,文件名包含三个部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt
三、文件的打开和关闭
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件
1. fopen函数
//打开文件
FILE * fopen ( const char * filename, const char * mode );
打开文件时,fopen函数返回一个FILE*类型的指针变量指向该文件
filename就是内容为文件名的字符串
需要注意,在字符串中表示\时,必须使用转义字符的形式,即\\,才能表示一个\字符
如下图所示:
另外,如果在filename参数中不写文件路径,而是只写文件主干和后缀的话,文件会在程序默认目录下
如图:
fopen的第二个参数mode表示文件的使用方式
文件使用方式 |
含义 |
如果指定文件不存在 |
“r”(只读) |
为了输入数据,打开一个文本文件 |
出错 |
“w”(只写) |
为了输出数据,打开一个文本文件 |
新建一个文件 |
“a”(追加) |
向文本文件尾添加数据 |
新建一个文件 |
“rb”(只读) |
为了输入数据,打开一个二进制文件 |
出错 |
“wb”(只写) |
为了输出数据,打开一个二进制文件 |
新建一个文件 |
“ab”(追加) |
向二进制文件尾添加数据 |
出错 |
“r+”(读写) |
为了读和写,打开一个文本文件 |
出错 |
“w+”(读写) |
为了读和写,新建一个文本文件 |
新建一个文件 |
“a+”(读写) |
打开一个文本文件,在文件尾进行读写 |
新建一个文件 |
“rb+”(读写) |
为了读和写,打开一个二进制文件 |
出错 |
“wb+”(读写) |
为了读和写,新建一个二进制文件 |
新建一个文件 |
“ab+”(读写) |
打开一个二进制文件,在文件尾进行读写 |
新建一个文件 |
2. fclose函数
//关闭文件
int fclose ( FILE * stream );
下面来看一个例子,深化对以上内容的理解:
三、文件的顺序读写
上面是一些常用的文件输入输出函数,具体用法可以查阅cplusplus网站
四、文件的随机读写
前文讲到的函数都是用于文件的顺序读写
下面来介绍三个用于文件随机读写的函数
1. fseek函数
int fseek ( FILE * stream, long int offset, int origin );
根据文件指针的位置和偏移量来定位文件指针
来看一个例子:
分析:
以"w"模式调用fopen函数,新建了一个文本文件
利用fputs函数,写入文件内容"This is an apple."
再利用fseek函数,找到相对于起始位置(SEEK_SET)偏移量为9的位置,将" sam"内容写入文件
最后必不可少的一步,关闭文件和指针置空
这样,文件内容就变成了"This is a sample."
如下图所示:
那么如何获取指针偏移量呢?
C语言提供了一个函数:
2. ftell函数
返回文件指针相对于起始位置的偏移量
long int ftell ( FILE * stream );
这部分的使用较为简单,便不再赘述。
另外,我们知道,文件在读写时,文件指针指向的位置是会随着读写而改变的
那么,如何能让指针回到起始位置呢?
C语言又提供了一个函数:
3. fwind函数
让文件指针的位置回到文件的起始位置
void rewind ( FILE * stream );
来看一个例子:
分析:
上述代码先新建了一个用于读写的文本文件,并写入了A~Z这26个字母的内容
写入完成后,此时文件指针指向的是最后一个字母Z
此时我们调用fwind函数使文件指针回到起始位置
再从起始位置读取文件内容到字符数组buffer中
然后关闭文件,指针置空
最后将字符数组的内容以字符串形式打印在屏幕上
五、文件读取结束的判定
文件读取结束有两种原因,一为读取失败结束,二为正常遇文件尾结束
//判断是什么原因结束的if (ferror(fp))puts("I/O error when reading");else if (feof(fp))puts("End of file reached successfully");
六、文件缓冲区
ANSI C 采用“缓冲文件系统”处理数据文件
从内存向磁盘输出的数据,会先送到内存中的输出缓冲区,装满缓冲区后才一起送到磁盘上
从磁盘向内存输入的数据同理,会先送到内存中的输入缓冲区
如下图所示:
【C语言】文件操作必知必会相关推荐
- mysql中用完即删用什么_MySQL使用和操作总结(《MySQL必知必会》读书笔记)
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机--服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
- mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)
站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
- 【SQL必知必会】002-基础篇:了解SQL:一门半衰期很长的语言
[SQL必知必会]002-基础篇:了解SQL:一门半衰期很长的语言 文章目录 [SQL必知必会]002-基础篇:了解SQL:一门半衰期很长的语言 一.概述 二.半衰期很长的 SQL 三.入门 SQL ...
- 《MySQL必知必会》SQL文件
<MySQL必知必会>SQL文件: 表的创建和外键绑定: # 在Mysql中取消外键约束 SET FOREIGN_KEY_CHECKS=0; DROP TABLE customers; D ...
- linux运行界别,day7 Linux下必知必会文件(2)
主要内容: 运行级别 Linux下面必知必会文件和目录 Linux启动流程 一.运行级别 1.运行级别分为0--6共七级 具体如下表: 级别 CentOS 6 (run level) CentOS 7 ...
- mysql必知必会_MySQL必知必会
MySQL必知必会 联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束. 了解SQL 数据库基础 电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验 ...
- 性能调优之JMH必知必会1:什么是JMH
性能调优之JMH必知必会1:什么是JMH JMH必知必会系列文章(持续更新) 一.前言 二.什么是JMH 1.JMH简介 2.JMH入门 3.使用JMH进行微基准测试 JMH必知必会系列文章(持续更新 ...
- SQL Server必知必会
SQL Server必知必会 2009-10-27-17:57:57 Structure Query Language:SQL 结构化 查询 语言 数据库产品: ...
- 致Emacs初学者+Emacs初学者必知必会
原文链接:http://emacser.com/to-emacs-beginner.htm 需要专门花时间去学的软件为数不多, Emacs正是其中之一. 我周围的好多人在我的"鼓吹" ...
最新文章
- 素材路上|专注平面设计素材模板,可能会让你抛弃花瓣!
- MongoDB删除文档(非常详细~)
- Cisco ASA Web ××× 配置详解
- [No000094]SVN学习笔记4-版本库概念与部分日常操作
- 用计算机表白的数字,数字表白密码 表白密码大全
- 简析通达信股票接口测试过程
- 周爱民-javascript
- 《京东话费充值系统架构演进实践》--阅读
- SQL and NOSQL
- 关于SASE与安全市场的那些事
- JavaScript实现点赞效果
- 计算机积分符号,积分符号积分区间怎么打出来
- 防范SQL注入式攻击
- JavaCV开发详解之36:使用delogo滤镜实现去除和屏蔽视频水印
- 推荐一款简单的页面加密网页(免费的哦)
- 意外和明天不知道哪个先来
- windows下基于Aria2的下载工具
- numpy.unravel_index
- 基于51单片机超声波测距液位检测-温度检测
- ANSYS Workbench接触非线有限元计算视频教程
热门文章
- 科达视频系统设置服务器,科达电力系统视频监控解决方案
- 武田将在即将召开的虚拟科学大会上呈报数据,强调肿瘤产品阵容和后续产品管线的广度
- 第二周 Turtle库的使用
- 计算机实战项目、毕业设计、课程设计之 含论文+辩论PPT+源码等]微信小程序基于微信小程序的美容预约+后台管理系统
- 新品周刊 | ​内外、UR、迪士尼商店、Kipling、资生堂、林清轩等女王节新品发布...
- 议题征集倒计时|Pulsar Summit Asia 2021 议题征集截至 9 月 30 日
- 网络游戏开发之安全对抗
- 向远程提交分支的时候error: src refspec master does not match any错误
- 裂脑DNS(Split DNS)的那点旧事研究
- 2022年湖南省高职单招(语文)考试冲刺试题及答案