内容正文:
第11章 文件
本章内容
11.1文件概述
11.2文件的打开与关闭
11.3文件读写函数
11.4文件定位与随机读写
11.5文件检测函数
11.6综合案例
11.1文件概述
文件
从用户的角度看,文件可分为普通文件和设备文件两种
从文件编码的方式来看,文件可分为ASCII文件和二进制文件两种
C语言在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。
按是否使用缓冲区分为标准文件和非标准文件
文件的存取方式
顺序存取
每当打开文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读或写
直接存取
可以通过调用C语言的库函数去指定开始读(写)的字节号,然后直接对此位置上的数据进行读(写)操作
11.2文件的打开与关闭
11.2.1文件指针
定义说明文件指针的一般形式为:
FILE *指针变量标识符;
FILE数据结构定义在stdio.h头文件中
文件指针变量的一般形式为:
FILE *变量名;
例如:FILE *fp;
typedef struct {
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;
11.2.2文件的打开
调用的一般形式为:
FILE * fopen(char *filename,char *mode)
例如:
FILE *fp;
fp=fopen("file.dat","r");
又如:
FILE *fp1;
fp1=("c:\\windows\
otepad.exe',"rb");
文件的存取方式
文件存取方式 意 义
"r" 只读,打开一个文本文件,只允许读数据
"w" 只写,打开或建立一个文本文件,只允许写数据
"a" 追加,打开一个文本文件,并在文件末尾写数据
"rb" 只读,打开一个二进制文件,只允许读数据
"wb" 只写,打开或建立一个二进制文件,只允许写数据
"ab" 追加,打开一个二进制文件,并在文件末尾写数据
"r+" 读写,打开一个文本文件,允许读和写
"w+" 读写,打开或建立一个文本文件,允许读写
"a+" 读写,打开一个文本文件,允许读,或在文件末追加数据
"rb+" 读写,打开一个二进制文件,允许读和写
"wb+" 读写,打开或建立一个二进制文件,允许读和写
"ab+" 读写,打开一个二进制文件,允许读,或在文件末追加数据
文件使用方式 说明
文件的存取方式由以下五个字符组合而成:
r(read):读
w(write):写
a(append):追加
b(binary):二进制文件
+:读和写
用含有字符“w”的方式打开的文件时,若打开的文件不存在,则以指定的文件名建立该文件
若要向一个已存在的文件追加新的信息,只能用含有字符“a”的方式打开文件。但此时该文件必须是存在的,否则将会出错
在打开一个文件时,如果出错,fopen将返回一个空指针值NULL
if((fp=fopen("c:\\windows\
otepad.exe","rb")==NULL)
{
printf("
error on open c:\\windows\
otepad.exe file!");
exit(1);
}
文件使用方式 说明
把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换
标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)的文件指针变量是由系统自动定义的,在程序中可以直接使用
标准设备文件及其FILE结构指针变量名
设备文件 FILE结构指针变量名
标准输入(键盘) stdin
标准输出(显示器) stdout
标准辅助输入输出(异步串行口) stdaux
标准打印(打印机) stdprn
标准错误输出 stderr
11.2.3文件的关闭
打开磁盘文件进行写入时,若缓冲区未被填满,这些内容将被保存在缓冲区中,而不写入磁盘文件,当进行关闭文件操作时,系统才将缓冲区的内容写入文件
函数调用的一般形式为:
int fclose(FILE *fp)
fclose函数关闭文件操作成功后,函数返回0;失败则返回非零值
关闭所有打开文件的函数fcloseall,函数调用的一