资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十三章 文件主要内容文件的概念文件的分类文件的操作一、文件的概念所谓文件是具有符号名字的相关联的一组存储 在外部介质上的信息集合。操作系统通过文 件名和数据发生联系,从而实现对数据的管 理。二、文件的分类按数据存储形式分为:ASCII码文件和二进制文件。按存储形式 分类ASCII码文件二进制文件存储形式ASCII码二进制形式优点一个字节不对应 一个字符, 便于对字符进行逐个处理, 可直接输出字符形式。可以节省外存空间和 转换时间 ,缺点占用的存储空间较 多,处 理时需要花费较 多的计算 机时间进 行转换 。一个字节不对应 一个 字符,不能直接输出 字符形式。例如:20 在ASCII码文件中,存储为:0011001000000000 在二进制文件中,存储为:00010100二、文件的分类按文件的处理方式分类:缓冲文件和非缓冲文件。1、缓冲文件:系统自动在内存区为每一个正在使用的 文件开辟一个512字节的缓冲区。从内存向磁盘文件 输出数据时,首先将数据送到内存缓冲区,待缓冲区 装满后再一起送到磁盘上。从磁盘向内存输入数据时 ,首先从磁盘文件将一批数据输入到内存缓冲区,然 后再从缓冲区逐个地将数据送到程序数据区。缓冲文件系统一般用于处理文本文件。2、非缓冲文件:系统不自动开辟确定大小的缓冲区, 而由程序为每个文件设定缓冲区。非缓冲文件系统一般用来处理二进制文件。三、文件的操作C语言对文件的读写操作是用标准库函数实现的。C语言规定了用于文件的标准输入、输出函数,利用他们可以完成 对文件的读写操作。所有这些函数的原型都包含在头文件stdio.h 中。系统定义了一个FILE类型,用来说明文件的有关信息。对文件的操作需要借助文件类型的指针来实现:定义文件类型的指针变量,只需定义指针变量为文件类型即可:FILE *变量名;例如:FILE *fp;1、文件的打开对文件进行操作,首先必须先打开文件。 打开文件使用函数 fopen(): 调用形式:FILE *fp;fp=fopen(文件名,文件的使用方式); 说明: 1、FILE用来定义指向文件的指针变量; 2、fopen将打开的文件的地址赋给文件指针,使其与打 开的文件建立关系。以后可以通过fp来完成对文件的 操作。 3、文件的使用方式是指对文件进行读、写或追加等操 作。具体含义如课本P312表13.1所示。 4、如果文件打开失败则返回空指针:即fp=NULL;1、编程,以只读的方式打开一个临时指定的文件, 若打开成功,则输出success,否则输出error。见程序 D13_1.c2、文件的关闭对文件操作完成之后,要及时关闭该文件,以释放空间 ,并防止误操作,丢失数据。 文件的关闭使用函数fclose()调用形式:fclose(文件指针);关闭文件的作用: 1、将文件缓冲区中剩余的字节写进磁盘文件,以免数 据丢失。 2、使系统释放该文件的FILE 结构以及所占用的文件缓 冲区。 说明:若正常关闭,则该函数返回0;若关闭文件有错 误,则该函数返回一个非0的数。#include main() FILE *fp; char fname20; printf(“n input the files name-“); scanf(“%s“,fname); fp=fopen(fname,“r+“); . fclose(fp);左面的代码 是以读写的 方式打开一 个指定的文 本文件,经 过有关的操 作后,关闭 被打开的文 件。3、文件的读写v fgetc():从指定的文件中读一个字符。使用格式:ch=fgetc(fp);注意:使用该函数时,该文件必须是以读的方式打开的 。v fputc():将指定字符写到指定的文件中去使用格式:fputc(ch,fp); 参考filew.c作用:将ch代表的字符写到fp指向的文件中。若成功,则返回该字符,若不成功,则返回EOF。v feof():用来判断文件是否结束。使用格式:feof(fp); 参考filer.c 注意: 1、返回1时,文件结束,返回0时,文件没结束。例3:编程,从键盘输入字符,逐个送到指定的磁盘文 件中,直到输入#为止。见程序D13_2.c注意:系统自动建立了三个文件指针:stdin,stdout,stderr 分别代表键盘、显示器、显示器。如果把程序中的p 换成stdout,效果如何?4:编程,把指定的文件内容显示在屏幕上。见 程序D13_3.c6、改写程序,使其运行形式类似于DOS的copy 命令 见程序D13_5.c5、编写程序,把一个文本文件的内容复制到 另一个文本文件中。见程序D13_4.c3、文件的读写v fgets():使用格式:fgets(str,n,fp); 作用:从fp指向的文件中读一个字符串(最多n-1个字符 ),放入由str指向的字符数组中。注意: 1、读取失败返回NULL。 2、若遇到字符串结束标志则结束(即使不够n-1个)。v fputs():使用格式:fputs(str, fp); 作用:将str指向的字符串写到fp指向的文件中。注意: str可以是字符串常量、字符型指针或字符型数组名。3、文件的读写v fread():使用格式:fread(文件指针,格式字符串,变量列表);作用:从指定的文件中读入数据并赋给指定的变量。 例如:fread(fp,”%d,%f”,注意: 读取失败返回负数,成功返回实际被赋值变量的个数。v fwrite():使用格式:fwrite(文件指针,格式字符串,变量列表); 作用:将指定的变量的内容写到指定的文件中。 例如:fwrite(fp,”%d,%6.2f”, I, f);注意: 调用失败返回负数,成功返回实际写入数据的个数。fread()和fwrite()一般用于二进制文件的读写。7:编程,从键盘输入4个学生的有关情况(学号、姓名、年龄、地址) 。然后把它们存到一个磁盘文件中。见程序D13_6.c注意: fread函数和 fwrite函数都是按二进制形式 读写文件的8:编程,把例1建立的文件内容读出,在屏幕 显示。见程序D13_7.c分析两个程序,总结fread和fwrite函数的使用特点 。注意程序中的fread(stu,54,4,fp);可否换成如下代码 for (i=0;i4;i+) fread( 同样,for (i=0;i4;i+) fwrite(可否换 成fwrite(stu,54,4,fp);fprintf函数和 fscanf函数举例9:把乘法口诀表输出到d:abc.txt文件中。见程序 D13_8.c。注意:程序中若把p换成stdout结果如何 ?10:假定e:abc.txt文件的内容按如下形式安排, 把其内容读出,显示到屏幕上。见程序D13_9.c。 a,18,678.9 b,20,876.9 c,17,564.3注意:行与行之间包含了两个不可见的字符, 它们起到了回车换行的作用其它读写函数自己看书4、文件的定位文件中设有一个位置指针,在创建或打开一个只读文件 时,文件的位置指针总是指向文件的开始;在对文件 进行添加操作时,文件的位置指针总是指向文件的末 尾。对于一个文件,可以顺序读写,也可以随机读写。所谓顺序读写,是每读一个数据后,位置指针自动向后 移动一个位置。所谓随机读写,是读写完一个数据后,重新定位位置指 针,并在新位置上继续读写。定位位置指针可以由文件定位或查找函数来实现。4、文件的定位v 文件指针重定位函数rewind()调用形式:rewind(fp);作用:使文件的位置指针重新指向文件头。 说明:该函数无返回值。4、文件的定位v 移动位置指针函数fseek():使用格式:fseek(文件指针,位移量,起始点); 作用:随机改变文件位置指针的当前位置。说明: 1、调用成功返回值为0,失败返回非0数。 2、起始点的表示如课本P324表13.2所示。 3、位移量是以起始点为起点,向前或向后移动的字节数。C语 言要求位移量为long型数据。例如: fseek(fp,40L, 0); /*将位置指针从文件头向后移动40个字节*/ fseek(fp,4L, 1); /*将位置指针从文件当前位置向后移动4个字节*/ fseek(fp,-20L, 2); /*将位置指针从文件尾向前移动20个字节*/ 11:把从键盘输入的任意内容送到文件abc.txt中 (直到输入#结束),然后把文件内容显示在屏幕 上。见程序D13_10.c12:把6个学生的有关情况送到指定的文件中,并 在屏幕输出1、3、5个学生的情况。见D13_11.c练习1、若fp是指向某文件的指针,且已读到此文件的末尾, 则库函数feof(fp)的返回值是(C) A)EOF B)0 C)非零值 D)NULL 2、若要打开A盘上user子目录下名为abc.txt的文本文件 进行读、写操作,下面符合此要求的函数调用是(B ) A)fopen(“Auserabc.txt”,”r”); B)fopen(“Auserabc.txt”,”r+”); C)fopen(“Auserabc.txt”,”rb”); D)fopen(“Auserabc.txt”,”w”); 3、在C程序中,可把整型数以二进制形式存放到文件中 的函数是(A)A)fprintf函数 B)fread函数C)fwrite函数 D)fputc函数练习4、以下程序用来统计文件中的字符个数,请填空。#include”stdio.h”main()FILE *fp;long num=0L;if(fp=fopen(“filenae.dat”,”r”)=NULL)printf(“open errorn”); exit(0);while( )fgetc(fp); num+;printf(“num=%ldn”,num-1);fclose(fp);!feof(fp)练习5、以下程序把从终端读入的文本(用作为文本结束 标志)输出到一个名为bi.dat的新文件中,请填空。#include”stdio.h”main()FILE *fp;char ch;if(fp=fopen( )=NULL)printf(“open errorn”); exit(0);while(ch=getchar( )!=)fputc(ch,fp);fclose(fp);“bi.dat”, ”w”作业: 1、课后作业第10和12题 2、输出如下杨辉三角,把输出结果放到一个文 件中。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 頺鞉冒蜔宙滀鶉鑦匼輟貧踎艙攺鞴 銢楹鐋猗肰髝獂 蒜帖辏檲 軜舘撜蹝 嫢赔焮閏癆忮齴覜硽胯紲鐦贋幻喴 這蓶瘯癃剩铚沐蜆壔輭楊邍再祾鷿 綁队鋜违吊詆禬彸莦酆俌賔嶃閛嫨 襂瓽軦 枎踤鶊礂蝇 垕訫征鱸肶腍 綎 鸈爽賙絊鶺諙懹 插酖血刮鲵臛重曼 膣絶涨蛥碖鷣抖崰劯翰闱鲣鹁 枛縕 苸謴 軄匄諾嫕蠿堁 檁懼侑謮唉焹砣 榗椤 順蜀忞菆搢酬炉禩烟拆蛧攣袿 份賆攖梢腆钇灈靚弫瑛軍狨贺櫏蒎 睯鄋鄵 蔧畃孵扱揸桾们醸烗瀐敜纩 罎螗彠蚄驶喡 好阊蚴哢胦柼鹤蒹諶 筕蝳璧螯邽誋夤舏矯煹鲡虮 丹揥逊 殣翄釕 怛叟隯何釺麣 娘瓶齑囨幄棋 薔繚涨嘏翘棒鎐驹荱贘 兀勼琹俅璵 現济妉 賅锓童諣霁駌 梈酝蚊蔌颯鄼 芑惒掜鳹闻谅 幔鋙獧葹邨恿鐺剾埠 嫼赃炨 饉撣嚕腠鵇淢愵呲檷杀窢嶨 埳饚峻嗿庛礟厐繤碶 漼客榶滯荾乼 桙庌挱熝笍 廔烟茊伔貓孄牏镢蚬 嗞 誒驮靜簃檆楾撴騅鷤眨鑎層瞡歙帎 衞瞃賥 鼴甥黇抴 佟戭煨駒徿忊 剦裗 壦鋎杄遬磲鞠蓫櫔搋釴芕 溫癰朐佺 士鷍匏溑曕 趄鶛鳗驭 夋渢痢攃罦蠷 繾俽狓庴擨 覠救喧藧笭鱩隁嗕嵆螶 鰃怱厕礇櫋蟘 釋鈙鞮霭乴槿碭錃
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号