文件:储存数据
文件:程序文件:(.c.obj.exe)
数据文件:运行时的数据或内容
文件名:文件路径+文件名主干+文件后缀
c:\code\test.txt
文件指针:
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件相关信息(文件名字,文件状态以及当前位置),信息是被保存在结构体FILE的变量中,一个文件一个变量。
通过FILE来维护变量
打开文件:
FILE*pf=fopen("D:\\code\\test.txt","r");//打开文件模式是只读,返回FILE指针,指针指向开辟的结构体FILE变量
//打开失败返回空指针
FILE*pf=fopen("test.txt","r");//相对路径:和源文件在同一目录
FILE*pf=fopen("..\test.txt","r");//在源文件上一级目录
fclose(pf);//关闭文件,参数是FILE*指针
"r":只读
"w":清空原来的文件,并写入
"a":追加文件
文件顺序读写:
fputc:
FILE*pf=fopen("D:\\code\\test.txt","w");
fputc('a',pf);
//按顺序写入
fgetc:返回读到的字符的assic码值,读取失败返回EOF
FILE*pf=fopen("D:\\code\\test.txt","r");
int ch=fgetc(pf);
printf("%c",ch);
//fputc和fgetc是逐个字符读写
fputs:
FILE*pf=fopen("D:\\code\\test.txt","w");//使文件可读
fputs('ahlgaglj\n',pf);
//写入ahlgaglj并换行
fgets:
FILE*pf=fopen("D:\\code\\test.txt","r");
int ch[20]={0};
fputs(ch,5,pf);//读取4个字符并放入ch中,并补上
fprintf:
FILE*pf=fopen("D:\\code\\test.txt","w");
int a=0;
int b=0;
fprintf(pf,"%d%d",a,b);//除了多了指针作为第一个参数其他和printf一样
fscanf:
FILE*pf=fopen("D:\\code\\test.txt","r");
fscanf(pf,"%d%d",&a,&b);//从文件中读取数据
fprintf和fscanf:相当于与程序操作的主体由人变成了文件
流:数据输入到流再输出可以对不同对象:屏幕,文件,网络。流就是FILE的结构体
任何一个c语言程序运行默认打开三个流:stdin-标准输入(键盘)FILE*
stdout-标准输出 (屏幕) FILE*
stderr-标准错误 (屏幕) FILE*
不含文件流,所以要手动打开fopen
以上适应所有的流:如fgetc()可以放文件流 标准输出流 :即fgetc()可以从文件中获取字符也可以从屏幕上
printf()scanf()只能用标准输入输出流
二进制输入输出:只能文件流
fwrite:以二进制来写
FILE*pf=fopen("D:\\code\\test.txt","wb");//二进制读写
int a=4;
fwrite(&a,sizeof(a),1,pf);
//要写的数据的地址,写入字符的大小,写入数量,目标指针
fread(&a,sizeof(a),1,pf)
//读到的数据放入地址,读取数据的大小,读入的数量,
函数scanf/fscanf/sscanf比较:
printf/fprintf/sprintf同理
scanf针对标准输入流 fscanf针对所有输入流
sscanf:从一个字符串中还原成一个格式化数据
sscanf(buf,”%d”,&a);
从字符串指向的内容 输入到a变量中
文件随机读写:
fseek:偏移指针
向左偏移,为负,向右为正
fseek(pf,1,SEEK_SET);
//指针,偏移量,偏移起始位置
//SEEK_SET:表示当前位置
//每次用fgetc等函数时,指针会自动偏移到下一个字符
ftell:告诉相对于起始位置的偏移量
ftell(pf);
rewind:使指针返回起始位置
rewind(pf);
数据在内存中以二进制存储,把二进制数据存到文件中就是二进制文件
如果转换为assic码值再存到文件中,就是文本文件。
如果是小端形式,那么也会以小端存到文件中
文件读取结束判定:
文本文件:
fgetc:
返回空指针:读取失败而导致读取结束
返回EOF:读到文件为尾而结束
feof:已结束时,判断结束原因是返回假:读取失败结束,还是返回真文件尾结束
返回空指针:读取失败而导致读取结束
返回EOF:读到文件为尾而结束
二进制文件判断:
返回值是否小于实际读取个数
文件缓存区:
系统为内存中为使用的文件开辟文件缓存区,从