C语言程序设计现代方法.ppt
- 文档编号:1368852
- 上传时间:2022-10-21
- 格式:PPT
- 页数:21
- 大小:783KB
C语言程序设计现代方法.ppt
《C语言程序设计现代方法.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计现代方法.ppt(21页珍藏版)》请在冰豆网上搜索。
第22章文件,文件基本概念文件打开与关闭文件读写,1C文件概述,文件:
存储在外部介质上数据的集合,是操作系统数据管理的单位。
使用数据文件的目的:
1、数据文件的改动不引起程序的改动程序与数据分离;2、不同程序可以访问同一数据文件中的数据数据共享;3、能长期保存程序运行的中间数据或结果数据。
文件分类,按文件的逻辑结构:
记录文件:
由具有一定结构的记录组成(定长和不定长)流式文件:
由一个个字符(字节)数据顺序组成按存储介质:
普通文件:
存储介质文件(磁盘、磁带等)设备文件:
非存储介质(键盘、显示器、打印机等)按数据的组织形式:
文本文件:
ASCII文件,每个字节存放一个字符的ASCII码二进制文件:
数据按其在内存中的存储形式原样存放,EOF文件的结束符:
C语言中规定的标准文件有三个:
标准输入文件(键盘),文件指针为stdin;标准输出文件(显示屏幕),文件指针为stdout;标准出错输出文件,文件指针为stderr。
C语言中的文件为流式文件一个字节流或二进制流。
文件的读写是按顺序进行的,以字符(字节)为单位。
这些文件在操作前或后,系统会自动将其打开或关闭,编程时不需管。
文本文件特点:
存储量大、速度慢、便于对字符操作,二进制文件特点:
存储量小、速度快、便于存放中间结果,可节省外存空间和转换时间但不能直接输出字符,文件处理方法,缓冲文件系统:
高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:
低级文件系统,由用户在程序中为每个文件设定缓冲区,2文件类型指针,文件结构FILE缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构描述FILE定义在stdio.h中,typedefstructint_fd;/*文件号*/int_cleft;/*缓冲区中剩下的字符数*/int_mode;/*文件操作方式*/char*_next;/*文件当前读写位置*/char*_buff;/*文件缓冲区位置*/FILE;,文件类型指针指针变量说明:
FILE*fp;用法:
文件打开时,系统自动建立文件结构,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构被释放,3文件的打开与关闭,一般文件:
操作前需打开,操作后需关闭。
打开和关闭均是通过库函数进行的。
打开文件就是要在内存中建立缓冲区,如打开成功,打开函数返回一个内存地址值,由一个文件指针接收。
以后的操作使用这个指针。
若内存不可建立缓冲区,则打开失败,打开函数返回NULL。
关闭文件很重要,是要将文件送回磁盘,并从内存中清除。
及时释放内存空间,并可保证文件安全。
文件使用方式:
打开文件-文件读/写-关闭文件,打开文件fopen函数原型:
FILE*fopen(char*name,char*mode);,功能:
按指定方式打开文件返值:
正常打开,为指向文件结构的指针;打开失败,为NULL,要打开的文件名,使用文件方式,例FILE*fp;fp=fopen(“c:
pytest.dat”,”r”);,例FILE*fp;char*filename=“c:
pytest.dat”fp=fopen(filename,”r”);,文件关闭fclose函数原型:
intfclose(FILE*fp);,功能:
关闭fp指向的文件,使文件指针变量与文件“脱钩”,释放文件结构占用的内存空间返值:
正常关闭为0;出错时,非0,文件打开时返回的文件指针,不关闭文件可能会丢失数据,4文件的读写,字符I/O:
fputc与fgetcfputc函数原型:
intfputc(charc,FILE*fp);功能:
把一字节代码c写入fp指向的文件中返值:
正常,返回c;出错,返回非0fgetc函数原型:
intfgetc(FILE*fp);功能:
从fp指向的文件中读取一字节代码返值:
正常,返回读到的字符;读到文件尾或出错,为EOF,例:
从键盘输入字符,逐个存到磁盘文件中,直到输入#“为止。
#includemain()FILE*fp;charch,*filename=“out.txt”;if(fp=fopen(filename,w)=NULL)printf(cannotopenfilen);exit(0);printf(Pleaseinputstring:
);ch=getchar();while(ch!
=#)fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);,例:
读文本文件内容,并显示。
#includemain()FILE*fp;charch,*filename=“out.txt”;if(fp=fopen(filename,”r)=NULL)printf(cannotopenfilen);exit(0);while(ch=fgetc(fp)!
=EOF)putchar(ch);fclose(fp);,判断文本文件是否结束,例:
使用文件处理函数,以及命令行参数,实现拷贝任何类型的文件。
#includemain(intargc,char*argv)FILE*in,*out;charch;if(argc!
=3)printf(”Usage:
sourcefilenameandtargetfilename”);exit
(1);if(in=fopen(argv1,”rb”)=NULL)printf(”Cannotopensourcefilen”);exit
(1);if(out=fopen(argv2,”wb”)=NULL)printf(”Cannotopentargetfilen”);exit
(1);,while(!
feof(in)/*Thiscodeactuallycopiesthefile*/ch=fgetc(in);fputc(ch,out);fclose(in);fclose(out);运行:
c:
testctempnewfile,字符串I/O:
fgets与fputs函数原型:
char*fgets(char*s,intn,FILE*fp);intfputs(char*s,FILE*fp);,功能:
从fp指向的文件读/写一个字符串返值:
fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULLfputs正常时返回0;出错返回非0,feof函数原型:
intfeof(FILE*fp);功能:
判断文件是否结束返值:
文件结束,返回真(非0);文件未结束,返回0,数据块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,voidsave()FILE*fp;inti;if(fp=fopen(d:
pystu_dat,wb)=NULL)printf(cannotopenfilen);return;for(i=0;iSIZE;i+)if(fwrite(,voiddisplay()FILE*fp;inti;if(fp=fopen(d:
pystu_dat,rb)=NULL)printf(cannotopenfilen);return;for(i=0;iSIZE;i+)fread(,格式化I/O:
fprintf与fscanf函数原型:
intfprintf(FILE*fp,constchar*format,argument,);intfscanf(FILE*fp,constchar*format,address,);,功能:
按格式对文件进行I/O操作返值:
成功,返回I/O的个数;出错或文件尾,返回EOF。
例:
fprintf(fp,“%d,%6.2f”,i,t);/*将i和t按%d,%6.2f格式输出到fp文件*/fscanf(fp,“%d,%f”,/*若文件中有3,4.5,则将3送入i,4.5送入t*/,例:
从键盘按格式输入数据存到磁盘文件中,从磁盘文件按格式输入数据并显示。
#includemain()chars80,c80;inta,b;FILE*fp;if(fp=fopen(test,w)=NULL)puts(cantopenfile);exit;fscanf(stdin,%s%d,s,9.5其他文件操作函数,文件位置指针-指向当前读写位置的指针读写方式顺序读写:
位置指针按字节位置顺序移动随机读写:
位置指针按需要移动到任意位置rewind函数函数原型:
voidrewind(FILE*fp);功能:
重置文件位置指针到文件开头返值:
无fseek函数函数原型:
intfseek(FILE*fp,longoffset,intwhence);功能:
改变文件位置指针的位置返值:
成功,返回0;失败,返回非0值。
ferror函数函数原型:
intferror(FILE*fp);功能:
测试文件操作是否出现错误返值:
未出错,0;出错,非0,小结,系统把文件当作一个“流”,按字节进行处理。
文件按编码方式分为二进制文件和ASCII文件。
语言中,用文件指针标识文件,当一个文件被打开时,取得该文件指针。
文件在读写之前必须打开,读写结束必须关闭。
文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。
文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。
文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 现代 方法