一、文件基础
1、什么是文件
文件:计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计z算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。
文本文件:
以ascll编写的可视化的字符型文件
不同的文字以特殊编码存在,如gbk,utf-8等
二进制文件:
直接以原生二进制码存放的文件
如bmp等图片文件,MP3等音频文件,EXE等可执行文件
linux一切皆文件
C语言支持的是流式文件,即数据流,它把文件看作一个字节序列,以字节为单位进行访问,没有记录界限,即数据的输入和输出的开始和结束仅受程序控制,而不受物理符号(如回车换行符)控制。
2、数据流
数据流(data stream)是一组有序有起点和终点的的字节的数据序列。数据的输入与输出都必须通过计算机的外围设备,不同的外围设备对于数据输入与输出的格式和方法有不同的处理方式,这就增加了编写文件访问程序的困难程度,而且很容易产生外围设备彼此不兼容的问题。数据流(Data Stream)用来解决这个问题。
数据流将整个文件内的数据看作一串连续的字符(字节),而没有记录的限制。
数据流借助文件指针的移动来访问数据,文件指针目前所指的位置即是要处理的数据,经过访问后文件指针会自动向后移动。
每个数据文件后面都有一个文件结束符号(EOF),用来告知该数据文件到此结束,若文件指针指到EOF便表示数据已访问完毕。
3、标准io与缓存
标准io: 间接调用系统调用函数(代码调用C库函数来间接调用系统函数),头文件是:stdio.h
标准IO操作:fopen fclose (fseek rewind ftell文件读取指针的位置相关指针)
标识文件方法:文件流指针
缓存:用户缓存(标准/文件IO)、内核缓存(标准/文件IO)、库缓存(标准IO);
4、文件框架
stdio.h
标准输入输出库文件, c语言获取的文件,其使用FILE结构体进行定义的
printf("helloworld"); // 在命令行显示一段内容
fprintf(stdout,"helloworld"); /// 相当于在标准输出文件当中进行输出
这两行代码是实现同样一个功能,printf 相当于是 fprintf 的一种特例,将数据流输出到标准输出文件中。
二、文件处理
1、文件打开与关闭
要打开指定的文件可使用fopen()函数
FILE *fopen(char *filename,char *mode);
其中第二个参数mode用来设定要打开的文件类型和指定文件的访问模式。
2、 读写操作
单字符读写函数:fgetc()和fputc()
int fgetc(FILE *fp);
功能:读取文件指针fp目前所指文件位置中的字符,读取完毕,文件指针自动往下移一个字符位置,若文件指针已经到文件结尾,返回-1。 fgetc()函数调用中,读取的文件必须是以读或读写的方式打开的。
int fputc(char ch,FILE *fp);
功能:把字符ch写入文件指针fp所指向文件的位置。 被写入的字符可以用写、读写、追加方式打开。
字符串读写函数:fgets()和fputs():