文件分类:
1,文件内容——程序文件(目标文件,源文件,可执行文件)和数据文件
2,文件组织形式——顺序存取文件和随机存取文件
3,文件存储形式——ASCII码文件和二进制文件
读文件与写文件:
读文件:将磁盘中的文件传送到计算机内存的操作
写文件:从计算机内存向磁盘文件中传送数据的操作
构成文件的基本单元与流式文件:
c语言中是将文件卡看做是由一个一个的字符(ASCII)或字节(二进制文件)组成的,将这种文件称之位流式文件
文件类型(FILE):
系统为每个打开的文件都在内存中开辟了一个区域,用于存放文件的有关信息,(文件名,文件位置),这些信息保存到一个结构体类型变量中,这个结构体类型由系统定义,取名为FILE
结构体类型名必须大写(FILE)
ASNIC的缓冲文件系统:
系统自动在内存区为每个正在使用的文件开辟一个缓冲区
从内存中向磁盘文件中输出数据时,必须先输出到缓冲区中,待缓冲区中的数据满后,再一起输出到磁盘文件中去
从磁盘文件中向内存读入数据的时候,首先将一批数据读入到缓冲区中,在从缓冲区中将数据逐个送到程序数据区
文件的打开与关闭:
对文件进行操作之前必须先打开该文件,使用结束后,应立即关闭,以免数据丢失
fopen()函数打开一个文件:
用法:
FILE *fopen("文件名","操作方式");返回一个指向文件的指针,如果不能实现打开指定文件的操作,则返回一个NULL
(1)文件名,是指要打开或要创造的文件的名字,如果这里使用的是字符数组或字符指针,则不加双引号
一般写法:
if((fp=fopen(“文件名”,“操作方式”))==NULL){
printf(“error!”);
exit(0);
}
fclose()函数关闭一个文件:
用法:int fclose(FILE *文件指针);
功能:关闭文件指针所指向的文件,如果正常关闭,则返回0,否则返回非0
例如:
fclose(fp);//关闭fp所指向的文件
文件的读写操作:
1,读写文件中的一个字符:
把一个字符写到文件中——fputc();
用法:int fputc(字符数据,文件指针);
功能:将字符数据输出到文件指针所指向的文件中去,同时将读写位置的指针向前移动1个字节如果输出成功,则函数返回值就是输出的字符数据,否则,返回一个符号常量EOF
代码:
FILE *fp;
if((fp=fopen("D:/1.txt","w"))==NULL){
printf("error!");
exit(0);
}
char ch;
while(1){
ch=getchar();
if(ch=='@'){
break;
}
fputc(ch,fp);
}
fclose(fp);
结果:
从文件中读取一个字符——fgetc()函数和feof()函数
int fgetc(“文件指针”);
功能:从文件指针所指向的文件中,读入一个字符,同时将读写位置的的指针向前移动一个字节,该函数没有出错返回值。
EOF,在ASCII码文件执行读入操作的时候,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF,在对二进制文件执行读入的时候,必须使用feof()来判断是否遇到文件尾。
代码:
FILE *fp;
if((fp=fopen("D:/1.txt","r"))==NULL){
printf("error!");
exit(0);
}
char ch;
for(;(ch=fgetc(fp))!=EOF;){
putchar(ch);
}
fclose(fp);
结果:
int feof(文件指针)
功能:在执行读文件的时候,如果遇到文件尾,则返回1,否则返回0;feof()函数同时适用于ASCII和二进制文件。
for(;!feof(fp);){
ch=fgetc(fp);
putchar(ch);
}
2,读写文件中的一个字符串:
int fputs(字符串,文件指针);
功能:指定文件输出的一个字符串,同时将读写位置的指针向前移动“字符串长度”个字节,如果输出成功,返回0,否则返回非0;
代码:
FILE *fp;
char a[80];
if((fp=fopen("D:/1.txt","w"))==NULL){
printf("error!");
exit(0);
}
gets(a);
fputs(a,fp);
fclose(fp);
结果:
char *fgets(指针,串长度+1,文件指针);
功能:从指定文件中读入一个字符串,存入“字符数组/字符指针中”,并在末尾自动加一个‘\0’结束标志,同时将读写位置的指针向前移动“字符串长度”个字节。
如果在读入规定长度之前遇到文件尾EOF或换行符,读入结束
fgets(a,strlen(a)+1,fp);
puts(a);
3,读写一个数据块:
一次读写一个数据块:
int fread(void *buffer,int size,int count,FILE *fp);
int fwrite(void *buffer,int size,int count,FILE *fp);
从fp所指向的文件的指针位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中,同时将读写位置指针向前移动size*count个字节。
4,对文件进行格式化读写:
int fprintf(文件指针,“格式符”,输入变量首地址表);
int fprintf(文件指针,“格式符”,输出参量表);
例如:int i=3,float f=9.8;
......
fprintf(fp,"%2d,%6.2f",i,f)
.....
fprintf()函数的作用,将变量i按照%2d的格式,变量f按照%6.2f的格式,以逗号作为分隔符,输出到fp所指向的文件中;
5,读写函数选用原则:
(1)读写一个字符的数据,选用fputc()和fgetc()函数
(2)读写一个字符串的时候,选用fgets()和gputs()函数
(3) 读写一个或多个不含格式的数据的时候,选用fread()和fwrite() 函数
(4) 读写一个或多个函格式的数据时,选用fscanf()和fprintf()函数