文件基本概念
1.描述:
文件用来存放程序、文档、音频、视频数据、图片等
2.几个设备文件:
键盘:标准输入文件
屏幕:标准输出文件
其它设备:打印机、触摸屏、摄像头、音箱等
3.磁盘文件
1.文件存取过程
我们的程序等信息保存在内存区。我们写一个程序后,我们输入的信息等等会随着程序结束而消失,每次运行都要重新输入,为了方便,我们将信息存储在磁盘中。
缓冲区的作用:提高存取效率与磁盘使用寿命
过程:先存放在缓冲区中,再由缓冲区一次性递交给磁盘;(若无缓冲区,则磁盘存入需要一个字节一个字节的存入,每次存入都要打开关闭)
2.文件存取特点
1.磁盘文件,一般保存在硬盘、光盘、U盘等掉电不丢失的磁盘设备中,在需要时调入内存
2.在内存中对文件进行编辑处理后,保存到磁盘中
3.程序与磁盘之间交互,不是立即完成,系统或程序可根据需要设置缓冲区,以提高存取效率
3.磁盘文件的分类
1.一个文件通常是磁盘上一段命名的存储区
2.计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是以字节为单位进行顺序存储
从用户或者操作系统使用的角度 (逻辑上) 可以把文件分为:
1、文本文件:基于字符编码的文件(直接一个字节一个字节读取)
1.基于字符编码,常见编码有ASCII、UNICODE等,一般可以使用文本编辑器直接打开
例如:
数5678的以ASCII存储形式为:
ASCII码:00110101 00110110 00110111 00111000
歌词文件(lrc):文本文件
优点:查看方便,一次使用一个字节
缺点:牺牲很大空间,需要转换过程
2、二进制文件:基于值编码的文件
1.基于值编码,自已根据具体应用,指定某个值是什么意思
2.把内存中的数据按其在内存中的存储形式原样输出到磁盘上
3.一般需要自己判断或使用特定软件分析数据格式例如:5678的存储形式为:
二进制码: 00010110 00101110音频文件(mp3):二进制文件
优点:效率高,节约空间
缺点:读取需要特定软件
3.文本文件、二进制文件对比:
1.译码:
文本文件编码基于字符定长,译码容易些;
二进制文件编码是变长的,译码难一些(不同的二进制文件格式,有不同的译码方式)
2.空间利用率:
二进制文件用一个比特来代表一个意思(位操作);
而文本文件任何一个符号至少需要一个字节。
3.可读性:
文本文件用通用的记事本工具就几乎可以浏览所有文本文件
二进制文件需要一个具体的文件解码器,比如读BMP文件,必须用读图软件读取
4.文件的打开与关闭
1.C 语言中不能直接操作文件
只能采用库函数间接对文件进行操作
2.C语言操作文件的基本流程为
在使用文件前要调用打开函数将文件打开
3.打开文件会得到一个文件指针fp
1.调用各种有关函数,利用fp对文件进行具体处理(读或写)
2.在文件用完时,及时调用关闭函数来关闭文件C语言中所有的文件操作都围绕文件指针完成
1.定义文件指针的一般形式为:
FILE *指针变量标识符
1.FILE为大写,需要包含<stdio.h>.
2.FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型
3.FILE结构体中含有文件名、文件状态和文件当前位置等信息
4.一般情况下,我们操作文件前必须定义一个文件指针指向我们将要操作的文件
实际编程中使用库函数操作文件,无需关心FILE结构体的细节
在缓冲文件系统中,每个被使用的文件都要在内存中开辟一块FILE类型的区域,存放与操作文件相关的信息
不必关心FILE的细节,只需要会用FILE定义指针变量 FILEfp=NULL;*
2.c语言中有三个特殊的文件指针无需定义、打开可直接使用
1.stdin: 标准输入 默认为当前终端(键盘 ) 我们使用的scanf、getchar函数默认从此终端获得数据
2.stdout: 标准输出 默认为当前终端(屏幕) 我们使用的printf、puts函数默认输出信息到此终端
3.stderr:标准出错 默认为当前终端(屏幕) 当我们程序出错或者使用:perror函数时信息打印在此终端
任何文件使用之前必须打开,使用后必须关闭