C语言——文件操作

引言

不知道大家有没有在写程序的时候卡退过,或者忽然停电。这样我们写到程序里的代码就不见了。但是,我们放在文件夹里的数据却不会丢失,欲知这是何原因,且听我分解。我将从文件定义、文件的打开与关闭、文件的读写这几个方面来展开。

定义

磁盘上的文件(夹)就是文件。当我们写程序则是吧数据写在了内存上,当操作系统把内存回收时,我们的数据也就无法访问了,所以我们引入文件。

文件的命名一般是文件的路径、文件名主干、文件后缀组成;文件一般可分为程序文件和数据文件。

程序文件包括源代码经过预处理、编译、汇编、链接这一些列过程中所产生的文件,如.c文件,.i文件,.s文件,.obj文件,.exe文件。(注解:关于源代码生成可执行程序的过程,可以参见我的下一篇博客:)

数据文件的内容不一定是代码,可以是我们写代码过程中使用和产出的数据。而根据数据存储形式,数据文件有可以分为二进制文件和文本文件,顾名思义,将数据以二进制形式直接存储到外存上,就是二进制文件;而如果将二进制文本转化为ASCII码字符的形式再存储到外存上,这就是文本文件。

文件的打开与关闭操作

介绍文件的打开与关闭之前,我们先接引入流的概念,由于我们的程序需要与不同的外部设备进行交互,而它们之间的操作往往是不同的,所以我们需要引入一个类似中转站的东西---流,这里面包含了交互时所产生的数据,供程序和设备交互。而当我们使用scanf和printf时,实际上也产生了流

stdin:标准输入流,一般从键盘键入,scanf从其中获取数据,stdout:标准输出流,大多数环境是输出到屏幕上,我们用printf打印的数据实际上进入了这个流。

当文件开辟时,我们会在内存上生成一个结构体变量FILE,用以存储该文件的各项信息,如开辟时间,文件大小,文件名等等;我们还会生成一个结构体变量指针FILE*pf,用以管理结构体变量进而管理文件。

打开⽂件: FILE * fopen ( const char * filename, const char * mode );

关闭⽂件:int fclose ( FILE * stream );

mode:操作模式一般包括下面这几种:

r:只读,为了获取文件数据,打开一个已经存在的文件,如果不存在就出错;

w:只写,为了向文件中写入数据,打开一个文本文件,如果不存在,就会生成一个新的文件;

a:追加 向⽂本⽂件尾添加数据,如果不存在,就建⽴⼀个新的⽂件;

rb:只读,为了获取文件数据,打开一个已经存在的二进制文件,如果不存在就出错;

wb:只写,为了向文件中写入数据,打开一个二进制文件,如果不存在,就会生成一个新的文件;

ab:追加 向二进制⽂件尾添加数据,如果不存在,就建⽴⼀个新的⽂件;

还有其他的mode,这里不展开了。

文件的顺序读取:

这里再介绍两个函数:

int scanf(const char * s , const char * format)

int sprintf(char * str, const char * format)

简单来说:sprintf是将格式化控制的数据输入到字符串str这个流里面去;sscanf是它的反函数。

文件的随机读取:
fseek:根据⽂件指针的位置和偏移量来定位⽂件指针

ftell:返回⽂件指针相对于起始位置的偏移量

rewind:初始化文件指针

注明:这里的指针是访问文件时鼠标光标指向的位置。

文件读取结束

1. ⽂本⽂件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets ) 

2.二进制文件判断文件是否读取结束: fread判断返回值是否⼩于实际要读的个数

注意:

牢记:在⽂件读取过程中,不能⽤feof函数的返回值直接来判断⽂件的是否结束。 feof 的作⽤是:当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。

⽂件缓冲区:ANSIC标准采⽤“缓冲⽂件系统”处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓 冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓 冲区的⼤⼩根据C编译系统决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值