目录
一、文件的有关概念
1.1 文件的概念
文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。
特点:数据永久存放,需要时被方便的访问。
1.2 文件的分类
根据数据的组织形式分类:
文本文件: ASCII文件,每个字节存放一个字符的ASCII码,代表一个字符。
二进制文件:数据按其在内存中的存储形式原样存放。
两种文件在内存中的存放形式:
例如整数 int a=1025,这两种文件的存储形式是不同的
两种存储格式的区别:
二进制文件的存储形式与数据在内存中的存储形式相同,读写是位复制,不需要转换,传输效率高,节省外存空间。 ASCII码文件是以字符形式存储,读写需要转换,传输效率低,占用外存空间较大。
1.3 文件缓冲区
ANSI C标准采用”缓冲文件系统”处理文件,所谓缓冲文件系统是指系统自动第在内存区为每一个正在使用的文件开辟一个”文件缓冲区”。
读文件是从磁盘读出数据存入内存。首先从磁盘读出一批数据送到文件缓冲区,然后从文件缓冲区取出数据存入内存。写文件是从内存向磁盘输出数据。首先将内存中的数据送到文件缓冲区,待文件缓冲区满,写入磁盘。
1.4 文件指针
每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(文件名\文件状态及文件当前位置等),这些信息保存在一个结构体变量中。
typedef struct {
int level; /* 缓冲区的空满程度 */
unsigned flags; /* 文件状态标志 */
char fd; /* 文件描述符 */
unsigned char hold; /* 如无缓冲区不读取字符 */
int bsize; /* 缓冲区大小 */
unsigned char _FAR *buffer; /* 数据缓冲区位置 */
unsigned char _FAR *curp; /* 指针,当前的指向 */
unsigned istemp; /* 临时文件,指示器 */
short token; /* 有效性检验 */
} FILE; /* 指定新类型名为FILE */
定义文件型指针变量 FILE *fp;
fp是一个指向FILE类型结构体的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。也就是说,通过文件指针变量能够找到与它相关的文件。
二、文件的打开和关闭
和其他高级语言一样,对文件读写之前应该“打开”该文件,在使用结束之后应关闭该文件。 “打开”:是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来存放输入输出的数据),并建立文件与它们之间的联系. “关闭”:只指撤消文件信息区和文件缓冲区,断开文件与内存之间的联系。
2.1文件的打开
FILE *fp; /*定义文件型指针变量*/ fp=fopen(文件名,使用文件方式); /*使指针变量指向打开的文件的信息区*/
例如: fp=fopen("a1","r"); /*表示要打开名字为a1的文件,使用文件方式为“读入”,同时带回指向a1文件的指针并赋给fp,这样fp和文件a1相联系了*/
FILE *fp1,*fp2,*fp3;
fp1=fopen(“abc”,”r”);
fp2=fopen(“d:\\mydoc\\stu.dat”,”r”);
fp3=fopen=(“a1.txt”,”r”);
打开文件时通知编译系统三个信息:需要打开的文件名、文件的使用方法、文件指针
如果函数调用成功,fopen函数的返回值是指向该文件的指针,程序可以使用这个指针对所打开的文件进行读写操作。否则返回一个空指针—NULL;
if ((fp=fopen("e:\001\file1.txt","w"))==NULL)
{printf("file1.txt 不能打开!\n");
exit(1);
}
对于读写模式,打开文件时,当前文件指针指向文件