c语言之文件管理

一.文件存储在磁盘上。常见的磁盘有磁盘C、磁盘D。

二.文件分类:程序文件、数据文件

常见的程序文件:源程序文件(.c文件,编译编写的程序)、目标文件(.obj文件)、可执行文件(.exe文件)

数据文件:程序文件写入数据到A文件,程序文件从B文件读取数据,像A文件、B文件这样的称为数据文件

三.文件名:c语言之文件管理_第1张图片

 文件名有一些不能使用的符号

文件名可以不含后缀名

文件后缀表示文件打开方式

文件路径是文件从盘符到找到文件通过的路径的所有符号的集合

四.关于文件的打开和关闭

@1.文件的打开相关函数

a.头文件:

b.第一个参数是打开文件的路径(相对路径或者绝对路径),第二个参数是打开的方式,注意是以字符串的形式表示的

c.关于常见的打开文件的方式

c语言之文件管理_第2张图片

在选择"w"的打开方式,这次所写入的数据会完全覆盖原先的数据。

@2.文件的关闭相关函数

c语言之文件管理_第3张图片

a.头文件:

关于文件的打开和关闭使用操作如下图所示

c语言之文件管理_第4张图片

代码执行前 

c语言之文件管理_第5张图片

代码执行后

c语言之文件管理_第6张图片

可以发现新创建了一个text.txt文件 

五.文件的顺序函数

1.fgetc()函数

c语言之文件管理_第7张图片

a.头文件:

b.功能:从文件中读取一个字符

c.使用

c语言之文件管理_第8张图片

2.fputc()函数

c语言之文件管理_第9张图片

a.头文件:

b.功能:向文件中写入一个字符

c.解析:第一个参数表示写入文件的字符

d.使用:c语言之文件管理_第10张图片

程序执行前:c语言之文件管理_第11张图片

程序执行后:

 c语言之文件管理_第12张图片

3.fgets()函数

c语言之文件管理_第13张图片

a.头文件:

b.功能:从文件中读取一行字符

c.解析:第一个表示要存储读取的字符串的地址,第二个参数表示要读取字符串的字符个数

d.使用

c语言之文件管理_第14张图片

4.fputs()函数

c语言之文件管理_第15张图片

a.头文件:

b.功能:向文件中写入一行数据

c.解析:第一个参数表示写入文件的字符串

d.使用:

c语言之文件管理_第16张图片

程序执行前:

c语言之文件管理_第17张图片

程序执行后:c语言之文件管理_第18张图片

5.fprintf()函数--格式化输出函数

c语言之文件管理_第19张图片

a.头文件:

b.功能:向文件中写入一行格式化的数据

c.使用:

c语言之文件管理_第20张图片

程序执行前:

c语言之文件管理_第21张图片

程序执行后: 

c语言之文件管理_第22张图片

6.fscanf()函数--格式化输入函数

c语言之文件管理_第23张图片

a.头文件:

b.功能:从文件中读取格式化的数据

d.使用:

这里少了struct Stu的定义

c语言之文件管理_第24张图片

c语言之文件管理_第25张图片

7.fread()函数 --二进制输入函数

a.头文件:

b.功能:从文件中读取二进制形式存储的数据

c.解析:第一个参数表示存储以二进制形式存储的数据地址  ,第二个参数表示要读取以二进制数据存储的每个元素的大小,第三个参数表示要读取以二进制数据存储的元素的个数

d.使用:

c语言之文件管理_第26张图片

8.fwrite()函数

a.头文件:

b.功能:向文件中写入数据转换位二进制

c.解析:第一个参数表示存储以二进制形式存储的数据地址  ,第二个参数表示以二进制数据存储的每个元素的大小,第三个参数表示以二进制数据存储的元素的个数

d.使用:

由于是以二进制的方式写入数据,所以在选取写入方式时应该最好用"wb",而不是"w"。

c语言之文件管理_第27张图片

 程序执行前:

c语言之文件管理_第28张图片

程序执行后:

c语言之文件管理_第29张图片

因为是以二进制形式存储,其中一些规则我们现在还是不了解的,所以当文本输出你不认识的内容也是正常的,不要慌张。

如果你想看的懂该二进制形式存储的文件,首先在vs编译器中添加文本文件到目录。鼠标右击文件,点开打开方式,选择二进制编译器,就出现了以下的页面。

c语言之文件管理_第30张图片

这样,你就可以根据二进制数字的排序读出相应的ASCII码,解密为你所熟悉的文本形式。

 c语言之文件管理_第31张图片

为什么向文件输入数据、从文件中读取数据和函数名称恰恰相反。比如fprintf(),printf表示输出,为什么这个函数确实向文件写入数据呢?

这就要究其本质了。

c语言之文件管理_第32张图片

****一些常见的默认流:1.stdin--标准输入流(键盘)

2.stdout--标准输出流(屏幕)

3. stderr--标准错误流(屏幕)

()内代表的是与流对接的外部设备。

此外,前六个文件函数针对于所有输出输入流,而fread、fwrite函数是只针对于文件的。

关于文件这部分的知识我在学校真的是从未接触过的,但是不能着急,得要慢慢接触理解,像有耐心地对待一个陌生人,时间久了你不仅对他/她更熟悉了解,而且会发现他/她更多的闪光点。

七.文件的随机读写

1.fseek()函数

c语言之文件管理_第33张图片

a.功能:

根据文件指针与指定位置的偏移量来定位文件指针

三种指定位置:c语言之文件管理_第34张图片

b.使用:

c语言之文件管理_第35张图片

c语言之文件管理_第36张图片

2.ftell()函数

c语言之文件管理_第37张图片

a.功能:告知程序员当前文件指针与起始地址的偏移量

b.使用:

c语言之文件管理_第38张图片

3.rewind()函数

c语言之文件管理_第39张图片

a.功能:使文件指针重回起始地址

b.使用:

c语言之文件管理_第40张图片

 八.详解比较相近的文件函数

c语言之文件管理_第41张图片

1.sscanf()函数

c语言之文件管理_第42张图片

 a.头文件:

b.功能:将字符串转化为格式化的数据

c.使用:

c语言之文件管理_第43张图片

 

2.sprintf()函数

c语言之文件管理_第44张图片

  a.头文件:

b.功能:将格式化数据转换为字符串

c.使用:

c语言之文件管理_第45张图片

 

3.scanf 是针对标准输入(键盘)的格式化输入语句

printf 是针对标准输出(屏幕)的格式化输出语句

fscanf 是针对所有输入流的格式化输入语句

fprintf 是针对所有输出流的格式化输出语句

fscanf、fprintf的输入输出是针对程序而言的

sscanf 是可以将字符串转换为格式化数据的输入语句

sprintf 是可以将格式化数据转换为字符串的输出语句

sscanf、sprintf的输入输出是针对于程序而言,且不针对文件

九.文本文件和二进制文件

文本文件:以ASCII码值存储的方式存储数据的文件

二进制文件:以二进制存储的方式存储数据的文件

注:字符型以ASCII码值形式存储;数值既可以ASCII码值存储,也可以二进制形式存储,不同的情况各有利弊。

比如,整型数10000,ASCII码值存储占五个字节,二进制形式存储占四个字节。

整型数10,ASCII码值存储占两个字节,二进制形式存储占四个字节。

十.被误解的feof()函数

feof()函数功能:是在已经得知文件读取结束时判断因为什么原因而结束,并不是直接判断文件是否读取结束。通常与ferror()函数配套使用,feof()函数判文件是因为读到文件结束而不继续读,而ferror()函数是因为读取出错而不再读取。

判断文件读取结束的标志:1.文本文件是否已经结束,可以使用fgetc()函数得到的值是否为EOF,若为EOF则证明文件读取结束。

c语言之文件管理_第46张图片

2.文本文件是否已经结束,可以使用fgets()函数得到的指针是否为NULL,若为NULL则证明文件读取结束。

c语言之文件管理_第47张图片

3. 二进制文件是否已经结束,可以使用fread()函数返回的值(即成功读取到元素的个数)小于要读取的元素的个数,若为小于则证明文件读取结束。

c语言之文件管理_第48张图片

十一.文件缓冲区

内存向硬盘中传输数据,只有当数据填满文件缓冲区时,数据才会传输。相当于货物装满货车,货车才发动开往目的地。 

注意:fclose()函数在关闭文件的时候会刷新缓冲区,将缓冲区上的数据传输。

测试缓冲区存在的程序如图所示:

c语言之文件管理_第49张图片

你可能感兴趣的:(c语言)