一、前言

程序运行时,数据是在内存中存放的,而当程序退出后,数据也将不复存在。

如果想做到数据持久化,可以把数据存放在磁盘文件,或者存放到数据库。

学会文件操作,我们就可以将数据存放在电脑的硬盘上,实现数据的持久化。

二、何为文件

在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。

1. 程序文件

源程序文件(后缀为.c)

目标文件(windows环境后缀为.obj)

可执行文件(windows环境后缀为.exe)

2. 数据文件

程序运行时,要从中读写数据的文件

3. 文件名

通常,文件名包含三个部分:文件路径+文件名主干+文件后缀

例如: c:\code\test.txt

三、文件的打开和关闭

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件

1. fopen函数

//打开文件
FILE * fopen ( const char * filename, const char * mode );
  1. 打开文件时,fopen函数返回一个FILE*类型的指针变量指向该文件

  1. filename就是内容为文件名的字符串

需要注意,在字符串中表示\时,必须使用转义字符的形式,即\\,才能表示一个\字符

如下图所示:

另外,如果在filename参数中不写文件路径,而是只写文件主干和后缀的话,文件会在程序默认目录下

如图:

  1. 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语言】文件操作必知必会相关推荐

  1. mysql中用完即删用什么_MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机--服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  2. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)

    站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...

  3. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  4. 【SQL必知必会】002-基础篇:了解SQL:一门半衰期很长的语言

    [SQL必知必会]002-基础篇:了解SQL:一门半衰期很长的语言 文章目录 [SQL必知必会]002-基础篇:了解SQL:一门半衰期很长的语言 一.概述 二.半衰期很长的 SQL 三.入门 SQL ...

  5. 《MySQL必知必会》SQL文件

    <MySQL必知必会>SQL文件: 表的创建和外键绑定: # 在Mysql中取消外键约束 SET FOREIGN_KEY_CHECKS=0; DROP TABLE customers; D ...

  6. linux运行界别,day7 Linux下必知必会文件(2)

    主要内容: 运行级别 Linux下面必知必会文件和目录 Linux启动流程 一.运行级别 1.运行级别分为0--6共七级 具体如下表: 级别 CentOS 6 (run level) CentOS 7 ...

  7. mysql必知必会_MySQL必知必会

    MySQL必知必会 联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束. 了解SQL 数据库基础 电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验 ...

  8. 性能调优之JMH必知必会1:什么是JMH

    性能调优之JMH必知必会1:什么是JMH JMH必知必会系列文章(持续更新) 一.前言 二.什么是JMH 1.JMH简介 2.JMH入门 3.使用JMH进行微基准测试 JMH必知必会系列文章(持续更新 ...

  9. SQL Server必知必会

    SQL Server必知必会 2009-10-27-17:57:57 Structure     Query     Language:SQL 结构化       查询      语言 数据库产品: ...

  10. 致Emacs初学者+Emacs初学者必知必会

    原文链接:http://emacser.com/to-emacs-beginner.htm 需要专门花时间去学的软件为数不多, Emacs正是其中之一. 我周围的好多人在我的"鼓吹" ...

最新文章

  1. 素材路上|专注平面设计素材模板,可能会让你抛弃花瓣!
  2. MongoDB删除文档(非常详细~)
  3. Cisco ASA Web ××× 配置详解
  4. [No000094]SVN学习笔记4-版本库概念与部分日常操作
  5. 用计算机表白的数字,数字表白密码 表白密码大全
  6. 简析通达信股票接口测试过程
  7. 周爱民-javascript
  8. 《京东话费充值系统架构演进实践》--阅读
  9. SQL and NOSQL
  10. 关于SASE与安全市场的那些事
  11. JavaScript实现点赞效果
  12. 计算机积分符号,积分符号积分区间怎么打出来
  13. 防范SQL注入式攻击
  14. JavaCV开发详解之36:使用delogo滤镜实现去除和屏蔽视频水印
  15. 推荐一款简单的页面加密网页(免费的哦)
  16. 意外和明天不知道哪个先来
  17. windows下基于Aria2的下载工具
  18. numpy.unravel_index
  19. 基于51单片机超声波测距液位检测-温度检测
  20. ANSYS Workbench接触非线有限元计算视频教程

热门文章

  1. 科达视频系统设置服务器,科达电力系统视频监控解决方案
  2. 武田将在即将召开的虚拟科学大会上呈报数据,强调肿瘤产品阵容和后续产品管线的广度
  3. 第二周 Turtle库的使用
  4. 计算机实战项目、毕业设计、课程设计之 含论文+辩论PPT+源码等]微信小程序基于微信小程序的美容预约+后台管理系统
  5. 新品周刊 | ​内外、UR、迪士尼商店、Kipling、资生堂、林清轩等女王节新品发布...
  6. 议题征集倒计时|Pulsar Summit Asia 2021 议题征集截至 9 月 30 日
  7. 网络游戏开发之安全对抗
  8. 向远程提交分支的时候error: src refspec master does not match any错误
  9. 裂脑DNS(Split DNS)的那点旧事研究
  10. 2022年湖南省高职单招(语文)考试冲刺试题及答案