“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫作文件名。通常情况下,使用计算机也就是在使用文件。
一般文件分为两类:
1.文本文件:这种文件在保存时,每个字符对应一个字 节,用于存放对应的ASCII码。
2.二进制文件:按二进制的编码方式来保存文件内容。
清刷缓冲区的三种办法:
printf("hello,world ");//1. 程序正常结束刷掉缓存区
printf("hello,world\n");// 2. \n刷掉
printf("hello,world");//3.fflush
fflush(stdout) ;
文件基本操作
文件指针
文件指针 用于表示已打开的文件 文件指针是一个指向文件有关信息的指针,这些信息包括文件名、状态和当前 位置,它们保存在一个结构体变量中。在使用文件时需要在内存中为其分配空间, 用来存放文件的基本信息。该结构体类型是由系统定义的,C语言规定该类型为FILE 型。
FILE *指针变量表示符 例如: FILE *fc ;fc是一个指向FILE类型的指针变量.
文件的打开
fopen函数用来打开一个文件,打开文件的操作就是创建一个流。fopen函数的 原型在stdio.h
FILE *fp; fp=fopen(文件名,使用文件方式)
FILE *fc = fopen("./2.c","r");
其中,“文件名”是将要被打开文件的文件名,“使用文件方式”是指对打开 的文件要进行读还是写
文件关闭
fclose(文件指针名);// 一定记得要关闭文件
在程序结束之前应关闭所有文件,这样做的目的是防止因为没有关闭文件而造 成的数据流失。
文件的读写
打开文件后,即可对文件进行读出或写入的操作,一般用到函数去读写文件;
fputc函数
int ret = fgetc(fc);//只读一个字节 ,返回字节值
把一个字符写到磁盘文件(fc所指向的是文件)中
int main(){
FILE *fc = fopen("./2.c","r");// r是模式 r只读
if(fc==NULL){
printf("no g\n");
}
printf("1\n");
int ret = fgetc(fc);//只读一个字节 ,返回字节值
printf("%d\n",ret);
return 0;
}
在文件内打26个字母
FILE *pa = fopen("./cctv.txt","w");
if(pa==NULL){
printf("no g\n");
}
printf("1\n");
int i;
for(i=0;i<26;i++){
fputc(97+i,pa);
}
fclose(pa);// 一定记得要关闭文件
fgets函数,读取字符串
注意写和读时模式不一样:读是r 写用a+
int main(){
//读写字符串
FILE *pa = fopen("./cctv.txt","r");
if(pa==NULL){
printf("gg");
}
char cd[100];
char *pb;
pb = "world";
int cute = fputs(pb,pa);
printf("%d\n",cute);
while((strcpy (cd,fgets(cd,100,pa)))!=NULL){
printf("%s",cd);
}
fclose(pa);
return 0;
}
fread函数
fread函数的一般形式如下: fread( buffer, size, count, fp);
该函数的作用是从fp所指的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。
buffer:一个指针。对fread函数来说,是所要读入的数据存放的地址。
size:要读写的字节数。
count:要读写多少个size字节的数据项。
fp:文件型指针。
例如:fread( a, 2, 3, fp); 其含义是从fp所指的文件中每次读两个字节送入实数组a中,连续读3次。
FILE *pa = fopen("./cctv.txt","r+");
if(pa==NULL){
printf("no g\n");
}
char cc[27];
char *pb;
fread(cc,2,6,pa);//读取数据
int ret = fread(cc,2,6,pa);
printf("%s\n",cc);
printf("%d\n",ret);
fclose(pa);
fwrite写文件
fwrite函数的一般形式如下: fwrite( buffer, size, count, fp);
该函数的作用是将buffer地址开始的信息输出count次,每次写size字节到fp 所指的文件中。buffer:一个指针。对于fwrite函数来说,是要输出数据的地址(起始地址)
fwrite( a, 2, 3, fp); 其含义是将a数组中的信息每次输出两个字节到fp所指向的文件中,连续输出3 次。
玩一波 结构体内容写入文件中
typedef struct ss{
char name[20];
char sex[20];
char sco[20];
}SSS;
int main(){
FILE *pa = fopen("./cctv.txt","r+");
if(pa==NULL){
printf("no g\n");
}
SSS stu7[4]={{"黎明","1","99.5"},{"莉莉","2","99.7"},{"金","2","99.8"},{"无名","1","59.7"}};
fwrite(stu7,sizeof(SSS),4,pa);
rewind(pa);//光标移到前面
SSS stu8[4];
fread(stu8,sizeof(SSS),4,pa);
int i;
for(i=0;i<4;i++){
printf("%s %s %s\n",stu8[i].name,stu8[i].sex,stu8[i].sco);
}
fclose(pa);
return 0;
}
}
总结:绕的1.