C语言文件的输入与输出.ppt
- 文档编号:1388487
- 上传时间:2022-10-21
- 格式:PPT
- 页数:48
- 大小:1.65MB
C语言文件的输入与输出.ppt
《C语言文件的输入与输出.ppt》由会员分享,可在线阅读,更多相关《C语言文件的输入与输出.ppt(48页珍藏版)》请在冰豆网上搜索。
第11章文件的输入与输出,C语言程序设计,2,本章介绍文件概念及其相关术语、C语言输入输出的实现方法、流的概念和流式文件的输入和输出、文本文件的输入输出和二进制文件的输入输出、文件的顺序输入输出和文件的随机输入输出。
对输入输出的低层接口、文件在数据库和汉字显示方面的应用、流式文件库函数的设计也做了相应的介绍。
内容摘要,2,3,重点讲解,11.1文件概述11.2FILE指针和标准流式文件11.3流式文件的顺序输入输出11.4流式文件的随机输入输出11.5其它文件操作函数11.6输入输出的低层接口11.7流式文件系统中库函数的设计,小结,3,4,本章讨论关于计算机的存储器与I/O设备之间数据交换的程序设计问题。
目录,问题背景,4,5,基于操作系统的软件系统是将一组应用相关的数据构成一个逻辑单位,存储在外部存储器之中的。
这个逻辑单位被称为文件,以文件名加以标识。
目录,11.1文件概述,文件是指内存以外介质上以某种形式组织起来的数据集合。
在C语言中,文件中的数据分为两种数据格式存储。
5,6,第一类文本格式:
将文件数据区的每个字节解释为一个字符,回车符n解释为行结束标志(回车符之间的符号串称为一行)。
main()printf(“hi”);_,这种格式文件称为文本文件、行文文件、正文文件或纯文本文件。
文本文件是以字符序列形式存储数据的文件。
6,7,如果将内存数据按文本文件存储到外存中,则C语言通常需要将内存数据按指定格式转换成字符形式。
例如,intx=128;转换格式:
“%d”,0000000010000000,x,内存:
001100010011001001110000,外存:
1,2,8,如果将存储在外存中的文本文件数据取回到内存,则C语言通常需要将按指定格式转换成内存数据形式。
例如,intx=128;转换格式:
“%d”,0000000010000000,x,内存:
001100010011001001110000,外存:
1,2,8,写文件,读文件,7,8,如果当将内存多个数据写入文本文件的时候,特别注意的是:
在两个数据之间增加必的间隔符。
目的在于读文本文件时,能够保证获得数据转换的正确性。
例如,intx=128,y=821,a,b;转换格式:
“dd”或“dd”,0000000010000000,x,0000001100110101,y,内存:
128821,8,9,C语言是将键盘、显示器和打印机设备视同为文本文件进行处理的。
对于输出设备显示器和打印机,遇到输出回车符时,便换行显示或打印。
在字符模式下,显示器和打印机逻辑上呈现文本特性。
9,10,第二类二进制格式:
文件数据区仅按每个二进制位解释为0或1。
这种格式的文件称为二进制文件。
二进制文件是以二进制数字0/1序列形式存储数据的文件。
如果将内存数据按二进制文件存储在外存中,则C语言不需要转换,直接按内存数据0/1形式存储。
如果将存储在外存中二进制文件的数据取回内存,则C语言不需要转换,直接取回即可,其数值按内存单元之数据类型解释。
10,11,C语言对文件的读写提供有两种方式:
顺序读写和随机读写。
无论那种读写方式,文件采用一个文件读写指针记录对于文件的当前读写位置,并在一次读写后自动向文件尾方向移动。
按文本格式“c”转换读入1个char数据:
00110001。
按文本格式“d”转换读入1个int数据:
0000000000001100。
12,其移动距离取决于转换格式之对应字符串的长度。
11,12,按二进制格式读入1个char数据:
00110001。
按二进制读入1个int数据:
0011000100110010。
C语言对文件的读写提供有两种方式:
顺序读写和随机读写。
无论那种读写方式,文件采用一个文件读写指针记录对于文件的当前读写位置,并在一次读写后自动向文件尾方向移动。
12594,其移动距离取决于内存单元之数据类型的长度。
12,13,顺序读写方式:
打开文件时文件读写指针指向文件头或文件尾,读写一个“数据”后,读写指针自动指向下一个“数据”或文件尾。
程序无法修改文件读写指针,文件指针始终往文件尾方向移动。
数据的划分取决于读写方式和转换格式!
随机读写方式:
以二进制格式打开文件时,文件读写指针指向文件头或文件尾,读写一个“数据”后读写指针自动指向下一个“数据”或文件尾。
程序可以修改文件读写指针,文件指针可在头尾两个方向往返移动。
13,14,标准I/O函数是基于I/O流的操作。
流是从源点到终点方向流动的数据。
文件是“存储”在I/O设备上的数据的抽象;流是内存与I/O设备之间流动的数据的抽象。
实现时,流存储在I/O缓冲区中。
实现C语言应用程序的I/O运算之两种方法:
标准I/O函数是基于I/O流的操作。
C语言实现“字符流和BIT流特性差异的I/O设备”之间的转换,即各种I/O设备的差异对于应用程序是透明的。
基于I/O流操作的文件称为流式文件。
底层I/O函数是非缓冲的非基于I/O流的操作,基于非I/O流操作的文件称为非流式文件。
在非流式文件中,通过由操作系统分配提供的文件描述符(描述字或句柄)进行I/O操作。
无论是缓冲或者非缓冲的文件,其I/O操作的步骤如下,打开文件时,确定了文件读写格式和读写方式!
打开文件建立文件指针或文件描述符与文件间联系;对文件进行读写操作;关闭文件取消文件指针或文件描述符与文件间联系。
14,15,11.2FILE指针和标准流式文件,目录,FILE是C语言标准中定义的一种结构类型名称。
FILE类型的结构变量记载关于流的控制方面的全部信息。
不同的C编译器关于FILE结构类型的定义会略有差异,但提供的库函数原型都是满足C语言标准。
typedefstructshortlevel;/*缓冲区空满*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*非缓冲回送字符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*指向缓冲区指针*/unsignedchar*curp;/*当前读写位置指针*/unsignedistemp;/*临时文件描述符*/shorttoken;/*有效性检验标志*/FILE;/*结构类型命名*/,15,16,_streams是在头文件stdio.h中定义的、由系统创建、赋值和更新FILE类型的数组变量,其数组元素个数是由系统宏定义的、可同时打开的文件数目。
#defineOPEN_MAX20externFILE_Cdecl_streams;,_streams,FILE*fp;,程序中仅使用FILE*型变量,通常简称为FILE指针。
fp=fopen(,);/*fopen()打开文件函数*/,fclose(fp);/*fclose()关闭文件函数*/,文件IO操作步骤,16,17,_streams,#definestdin(&_streams0)/*标准输入设备,通常是键盘*/#definestdout(&_streams1)/*标准输出设备,通常是显示器*/#definestderr(&_streams2)/*标准出错设备显示器*/#definestdaux(&_streams3)/*标准辅助设备*/#definestdprn(&_streams4)/*标准打印设备*/,TurboC中已经定义了多个系统的标准流式文件,其声明如下。
getchar、gets和scanf函数是从stdin文件读数据;putchar、puts和printf函数则是向stdout文件写数据。
C标准规定,标准输入、标准输出和标准出错三个标准文件(文本流),在C程序开始运行时,由系统自动打开。
17,18,11.3流式文件的顺序输入输出,目录,文件打开函数fopen()声明如下,功能是按照参数mode指定方式,打开参数filename指定文件,返回filename的文件指针。
如果失败返回NULL。
FILE*_Cdeclfopen(constchar*filename,constchar*mode);,文件IO操作步骤,例如,按文本格式、顺序写方式打开文件c:
test.dat。
FILE*fp;fp=fopen(“c:
test.dat”,”w”);,11.3.1文件的打开与关闭,18,19,可以选择的文件打开方式mode如下。
其中,r表示只读,w表示只写,a表示添加,+表示更新,b表示二进制文件。
如果文件打开方式中不含有“b”,则表示以文本格式打开。
创建文件时,如果创建文件已经存在,则内容被清空。
r以只读方式文本格式打开w以只写方式文本格式打开或创建a以尾部添加只写方式文本格式打开或创建rb以只读方式二进制格式打开wb以只写方式二进制格式打开或创建ab以尾部添加只写方式二进制格式打开或创建r+以更新(读写)方式文本格式打开w+以更新(读写)方式文本格式打开或创建a+以尾部添加、更新方式文本格式打开或创建r+b或rb+以更新(读写)方式二进制格式打开w+b或wb+以更新(读写)方式二进制格式打开或创建a+b或ab+以尾部添加、更新方式文本格式打开或创建,19,20,文件关闭函数fclose()声明如下,功能是关闭stream文件指针“指向”的文件,返回值0表示正确执行,EOF表示出错。
int_Cdeclfclose(FILE*stream);,文件IO操作步骤,例如,按文本格式、顺序写方式打开文件c:
test.dat,之后关闭该文件。
FILE*fp;fp=fopen(“c:
test.dat”,”w”);fclose(fp);,20,21,例11.3文件打开、关闭、以及读写操作举例。
文件以文本文件格式创建,以二进制文件的形式读取,目的是观察文本文件在磁盘中的存储方式。
#includestdio.hvoidmain(void)chara20;unsignedcharu,i=0;FILE*fin,*fout;fout=fopen(c:
abc.dat,w+);while(gets(a)!
=NULL)fprintf(fout,%s,a);fclose(fout);fin=fopen(c:
abc.dat,r+b);while(!
feof(fin)fread(,文件IO操作步骤,21,22,11.3.2文件的重定向,文件的重定向函数freopen()声明如下,功能是在关闭fp指向的文件之后,fp重指向按照mode方式打开的、filename指定的文件,函数返回新打开的文件指针。
如果失败返回NULL。
FILE*_Cdeclrefopen(constchar*filename,constchar*mode,FILE*fp);,例如,按文本格式、顺序写方式打开文件c:
test.dat。
FILE*fp;fp=fopen(“c:
oldfile”,”r”);refopen(“c:
newfile”,”w”,fp);,22,23,voidmain(intargc,char*argv)intch;if(argc!
=3)printf(Argumentserror!
n);exit(-1);if(freopen(argv1,r,stdin)=NULL)/*stdin指向source_file*/printf(Cantopen%sfile!
n,argv1);exit(-1);freopen(argv2,w,stdout);/*stdout指向target_file*/while(ch=getchar()!
=EOF)/*从source_file中读字符*/putchar(ch);/*向target_file中写字符,实现拷贝复制*/fclose(stdin);/*关闭source_file*/fclose(stdout);/*关闭target_file
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 文件 输入 输出