# include <stdio.h>
# include <stdlib.h>
intmain(){FILE*open_file(char*,char*);FILE*fp;/*
* 向文件中写入字符
* fputc 写入成功返回写入的字符,写入失败返回C语言定义的EOF(符号常量,值为-1)
*/fp=open_file("C:/Users/kinglyjn/Desktop/test.txt","a+");//打开文件charc=getchar();while(c!='*'){fputc(c,fp);//c=getchar();//从控制台取到一个字符}fclose(fp);//关闭文件/**
* 从文件中读出字符(文件的打开方式必须为读方式或读写方式)
* 文件结束时,fgetc函数就会返回文件的结束标志EOF(-1)
*/fp=open_file("C:/Users/kinglyjn/Desktop/test.txt","r");c=fgetc(fp);while(c!=EOF){putchar(c);//输出一个字符到控制台c=fgetc(fp);//}fclose(fp);return0;}//文件打开函数FILE*open_file(char*filename,char*mode){FILE*fp=fopen(filename,mode);//r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加if(fp==NULL){printf("打开失败!\n");exit(1);}else{printf("打开成功!\n");}returnfp;}/*
r 打开只读文件,该文件必须存在
r+ 打开可读写的文件,该文件必须存在
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失.若文件不存在则建立该文件
a 以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留
a+ 以附加方式打开可读写的文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件
*/
块读写函数fwrite和fread
# include <stdio.h>
# include <stdlib.h>
typedefstructStudent{charname[10];floatscore;}Stu;intmain(){FILE*open_file(char*,char*);FILE*fp;Stustus[3]={{"张三",22.2},{"李四",33.3},{"王五",44.4}};Stustus2[3];intlen=3;//fwrite//fwrite(buffer,size,count,fp)//(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。//(2)size:要读写的字节数;//(3)count:要进行读写多少个size字节的数据项;//(4)fp:文件型指针。fp=open_file("/Users/zhangqingli/Desktop/test.txt","w");for(inti=0;i<len;i++){fwrite(&stus[i],sizeof(Stu),1,fp);//}fclose(fp);//fread//fread(buffer,size,count,fp)fp=open_file("/Users/zhangqingli/Desktop/test.txt","r");for(inti=0;i<len;i++){fread(&stus2[i],sizeof(Stu),1,fp);}fclose(fp);for(inti=0;i<len;i++){printf("%-10s %-5.2f\n",stus2[i].name,stus2[i].score);}return0;}//文件打开函数FILE*open_file(char*filename,char*mode){FILE*fp=fopen(filename,mode);//r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加if(fp==NULL){printf("打开失败!\n");exit(1);}else{printf("打开成功!\n");}returnfp;}
格式化文件输入和输出函数fprintf和fscanf
printf/scanf函数的读写对象是终端
fprintf/fscanf函数的读写对象是磁盘文件
# include <stdio.h>
# include <stdlib.h>
typedefstruct{charname[10];floatscore;}St;intmain(){FILE*fp;FILE*open_file(char*filename,char*mode);//fprintffp=open_file("/Users/zhangqingli/Desktop/test.txt","w");fprintf(fp,"%s %f","张三",23.2);fprintf(fp,"%s %f","李四",23.3);fprintf(fp,"%s %f","王五",23.4);fclose(fp);//fscanfSt*stus=(St*)malloc(sizeof(St)*3);fp=open_file("/Users/zhangqingli/Desktop/test.txt","r");inti=0;while(!feof(fp)){fscanf(fp,"%s %f",stus[i].name,&stus[i].score);i++;}fclose(fp);for(inti=0;i<3;i++){printf("姓名:%s 分数:%f\n",stus[i].name,stus[i].score);}return0;}//文件打开函数FILE*open_file(char*filename,char*mode){FILE*fp=fopen(filename,mode);//r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加if(fp==NULL){printf("打开失败!\n");exit(1);}else{printf("打开成功!\n");}returnfp;}
文件的定位
# include <stdio.h>
# include <stdlib.h>
intmain(){FILE*fp1;FILE*open_file(constchar*,constchar*);fp1=open_file("/Users/zhangqingli/Desktop/test.txt","rb");//把文件的位置指针移动到文件尾fseek(fp1,0,SEEK_END);//获取文件当前指针的位置longlen=ftell(fp1);//根据前面的操作可获取文件的长度printf("文件的大小为:%ld 字节\b",len);return0;}FILE*open_file(constchar*filename,constchar*mode){FILE*fp=fopen(filename,mode);if(fp==NULL){printf("文件打开时出错!\n");exit(1);}returnfp;}