C语言文件操作【基础知识 + 顺序读写 + 文件版通讯录】

😀 前言

前面写的程序都是一闪即逝,只要关闭了程序,就找不到运行的结果。如果想要将运行的结果保存下来,下次运行的时候接着上次运行,只有自己想要删除数据,数据才会消失。这就涉及到了数据持久化的问题, 我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。

现在就学习一下使用文件,我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

🤔 什么是文件

文件是计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以 JPEG 格式保存并且文件扩展名为 .jpg)。

但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)

😶 程序文件

程序文件存储的是程序,包括源程序和可执行程序。

包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。

😶 数据文件

数据文件比较多,数据的概念也比较广泛图形图像声音数字各种码制都是数据,存储这些数据的文件就是数据文件。

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

本文就是来学习一下数据文件。

以前我们写的代码所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。

但是有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上的文件。

在这里插入图片描述

😶 文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。

文件名包含3部分:文件路径+文件名主干+文件后缀

例如:c:\code\test.txt

为了方便起见,文件标识常被称为文件名

🤨 文件指针

文件类型指针简称文件指针

所谓的文件类型其实就是一个结构体类型:

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

其中在VS2013提供的stdio.h中,文件类型的声明如下:

struct _iobuf 
{
   
	char *_ptr;
	int _cnt;
	char *_base;
	int _flag;
	int _file;
	int _charbuf;
	int _bufsiz;
	char *_tmpfname;
};
typedef struct _iobuf FILE;

在这里插入图片描述

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。结构体变量毕竟太大了。

// demo
FILE* pf; 	// 文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。

在这里插入图片描述

🤫 文件的打开和关闭

使用文件之前需要打开文件,使用完要关闭文件(这个很重要,后面说)。

ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。

😑 fopen 打开文件

函数描述:
在这里插入图片描述

filename:文件名

文件名(路径 + 文件名)。如果没有指定路径,默认是在当前源文件的路径下(相对路径)。
注意: 路径的 \字符需要转义:\\

mod:打开文件的方式

在这里插入图片描述

📙 mod的规律:

文件不存在时:

w都是创建新的文件,r都是出错,a 除了ab 都是创建新文件

文件存在时:

文件存在并且只是以w的形式打开文件(包括wb)。文件的内容会被清空

双重形态

读带上 + 就是读写, 追加和写带上 + 就是读写,否则都只能读或者写。

返回值 Return Value

如果文件被成功打开,函数将返回一个指向file对象的指针。

否则,将返回一个空指针。

在大多数库实现中,errno变量也设置为失败时的系统特定错误代码。

😑 fclose 关闭文件

函数描述:

在这里插入图片描述

关闭文件流stream

返回值Return Value

如果成功了返回0。

失败返回EOF

// demo
fclose(pf);
pf = NULL
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_featherbrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值