业务14C语言程序设计-11-文件PPT资料.ppt
《业务14C语言程序设计-11-文件PPT资料.ppt》由会员分享,可在线阅读,更多相关《业务14C语言程序设计-11-文件PPT资料.ppt(15页珍藏版)》请在冰豆网上搜索。
/文件操作方式char*_next;
/文件当前读写位置char*_buff;
/文件缓冲区位置FILE;
文件类型指针指针变量说明:
FILE*fp;
用法:
文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放11.3文件的打开与关闭&
C文件操作用库函数实现,包含在stdio.h中&
文件使用方式:
打开文件-文件读/写-关闭文件&
系统自动打开和关闭三个标准文件:
标准输入-键盘stdin标准输出-显示器stdout标准出错输出-显示器stderr打开文件fopen函数原型:
FILE*fopen(char*name,char*mode)功能:
按指定方式打开文件返值:
正常打开,为指向文件结构体的指针;
打开失败,为NULL要打开的文件名使用文件方式例文件打开与测试FILE*fp;
fp=fopen(“aa.c”,“w”);
if(fp=NULL)printf(“Fileopenerror!
n”);
exit(0);
例FILE*fp;
fp=fopen(“c:
exampletest.dat”,”r”);
char*filename=“c:
exampletest.dat”fp=fopen(filename,”r”);
“r+/rb+”(读写)“a/ab”(追加)“w/wb”(只写)“r/rb”(只读)“w+/wb+”(读写)“a+/ab+”(读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义文件关闭fclose作用:
使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:
intfclose(FILE*fp)功能:
关闭fp指向的文件返值:
正常关闭为0;
出错时,非0文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:
fclose不关闭文件可能会丢失数据11.4文件的读写字符I/O:
fputc与fgetcfputc函数原型:
intfputc(intc,FILE*fp)功能:
把一字节代码c写入fp指向的文件中返值:
正常,返回c;
出错,为EOFfgetc函数原型:
intfgetc(FILE*fp)功能:
从fp指向的文件中读取一字节代码返值:
正常,返回读到的代码值;
读到文件尾或出错,为EOF文件I/O与终端I/O#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)#defineputchar(c)fputc(c,stdout)#definegetchar()fgetc(stdin)判断二进制文件是否结束while(!
feof(fp)c=fgetc(fp);
.例文件拷贝例从键盘输入字符,逐个存到磁盘文件中,直到输入#“为止#includemain()FILE*fp;
charch,*filename=“out.txt”;
if(fp=fopen(filename,w)=NULL)printf(cannotopenfilen);
printf(Pleaseinputstring:
);
ch=getchar();
while(ch!
=#)fputc(ch,fp);
putchar(ch);
fclose(fp);
例读文本文件内容,并显示#includemain()FILE*fp;
if(fp=fopen(filename,”r)=NULL)printf(cannotopenfilen);
while(ch=fgetc(fp)!
=EOF)putchar(ch);
判断文本文件是否结束feof函数原型:
intfeof(FILE*fp)功能:
判断文件是否结束返值:
文件结束,返回真(非0);
文件未结束,返回0#includemain()FILE*in,*out;
charch,infile10,outfile10;
scanf(%s,infile);
scanf(%s,outfile);
if(in=fopen(infile,r)=NULL)printf(Cannotopeninfile.n);
if(out=fopen(outfile,w)=NULL)printf(Cannotopenoutfile.n);
while(!
feof(in)fputc(fgetc(in),out);
fclose(in);
fclose(out);
数据块I/O:
fread与fwrite函数原型:
size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp)size_tfwrite(void*buffer,size_tsize,size_tcount,FILE*fp)功能:
读/写数据块返值:
成功,返回读/写的块数;
出错或文件尾,返回0说明:
typedefunsignedsize_t;
buffer:
指向要输入/输出数据块的首地址的指针size:
每个要读/写的数据块的大小(字节数)count:
要读/写的数据块的个数fp:
要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出例从键盘输入4个学生数据,把它们转存到磁盘文件中去#include#defineSIZE4structstudent_typecharname10;
intnum;
intage;
charaddr15;
studSIZE;
main()inti;
for(i=0;
iSIZE;
i+)scanf(%s%d%d%s,studi.name,&
studi.num,&
studi.age,studi.addr);
save();
display();
voidsave()FILE*fp;
inti;
if(fp=fopen(d:
exampleexestu_dat,wb)=NULL)printf(cannotopenfilen);
return;
i+)if(fwrite(&
studi,sizeof(structstudent_type),1,fp)!
=1)printf(filewriteerrorn);
voiddisplay()FILE*fp;
exampleexestu_dat,rb)=NULL)printf(“cannotopenfilen);
i+)fread(&
studi,sizeof(structstudent_type),1,fp);
printf(%-10s%4d%4d%-15sn,studi.name,studi.num,studi.age,studi.addr);
字符串I/O:
fgets与fputs函数原型:
char*fgets(char*s,intn,FILE*fp)intfputs(char*s,FILE*fp)功能:
从fp指向的文件读/写一个字符串返值:
fgets正常时返回读取字符串的首地址;
出错或文件尾,返回NULLfputs正常时返回写入的最后一个字符;
出错为EOF例从键盘读入字符串存入文件,再从文件读回显示fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个0(若读入n-1个字符前遇换行符或文件尾(EOF)即结束)fputs把s指向的字符串写入fp指向的文件#includemain()FILE*fp;
charstring81;
if(fp=fopen(file.txt,w)=NULL)printf(canntopenfile);
while(strlen(gets(string)0)fputs(string,fp);
fputs(n,fp);
if(fp=fopen(file.txt,r)=NULL)printf(canntopenfile);
while(fgets(string,81,fp)!
=NULL)fputs(string,stdout);
11.5文件的定位几个概念文件位置指针-指向当前读写位置的指针读写方式顺序读写:
位置指针按字节位置顺序移动,叫随机读写:
位置指针按需要移动到任意位置,叫rewind函数函数原型:
voidrewind(FILE*fp)功能:
重置文件位置指针到文件开头返值:
无例对一个磁盘文件进行显示和复制两次操作#includemain()FILE*fp1,*fp2;
fp1=fopen(d:
examplebkcch12_4.c,r);
fp2=fopen(d:
examplebkcch12_41.c,w);
feof(fp1)putchar(getc(fp1);
rewind(fp1);
feof(fp1)putc(getc(fp1),fp2);
fclose(fp1);
fclose(fp2);
fseek函数函数原型:
intfseek(FILE*fp,longoffset,intwhence)功能:
改变文件位置指针的位置返值:
成功,返回0;
失败,返回非0值文件指针位移量(以起始点为基点,移动的字节数)0向后移动0向前移动起始点文件开始SEEK_SET0文件当前位置SEEK_CUR1文件末尾SEEK_END2例fseek(fp,100L,0);
fseek(fp,50L,1);
fseek(fp,-10L,2);
ftell函数函数原型:
longftell(FILE*fp)功能:
返回位置指针当前位置(用相对文件开头的位移量表示)返值:
成功,返回当前位置指针位置;
失败,返回-1L,例磁盘文件上有3个学生数据,要求读入第1,3学生数据并显示main()inti;
FILE*fp;
if(fp=fopen(studat,rb)=NULL)printf(cantopenfilen);
i3;
i+=2)fseek(fp,i*sizeof(structstudent_type),0);
fread(&
studi,sizeof(structstude