第14章文件流和内存流.ppt

上传人:本田雅阁 文档编号:3420967 上传时间:2019-08-23 格式:PPT 页数:39 大小:271.54KB
返回 下载 相关 举报
第14章文件流和内存流.ppt_第1页
第1页 / 共39页
第14章文件流和内存流.ppt_第2页
第2页 / 共39页
第14章文件流和内存流.ppt_第3页
第3页 / 共39页
第14章文件流和内存流.ppt_第4页
第4页 / 共39页
第14章文件流和内存流.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《第14章文件流和内存流.ppt》由会员分享,可在线阅读,更多相关《第14章文件流和内存流.ppt(39页珍藏版)》请在三一文库上搜索。

1、第14章 文件流和内存流,14.1 文件及文件流的基本概念 文件:程序+数据+文档,外部设备的总称(aaa.c null prn con) 14.1.1 输入和输出 内存向外存: 输出、写、存 外存向内存: 输入、读、取 14.1.2 文件的存储方式 ASCII码: 1024=49 48 50 52 =0100 1001 0100 1000 0101 0000 0101 0010 二进制存储方式: 1024 =0000 0100 0000 0000 文件流: 专门用于磁盘文件I/O的流类(专门用于磁盘文件I/O的类)。,14.1.3 文件流类体系 类filebuf用于管理文件的缓冲区。 类fs

2、treambase提供了I/O所需要的所有成员函数。 类ifstream用于从文件中取(i)数据。 类ofstream用于向文件输出(o)数据。 类fstream用于文件的双向数据传递I/O)。 以上类的派生(产生)方法参看305页。,14.2 文件的打开与关闭 14.2.1 文件的打开 C+在文件流类中提供了4个文件的成员函数: void fstreambase:open(char *, int, int=filebuf :openprot) void ifstream :open(char *, int=ios : in, int) void ofstream : open(char *,

3、 int=ios : out, int) void fstream : open(char *, int, int),说明: 第一个参数是文件名,第二个参数是访问方式,第三个参数是保护方式。 在所有文件流的基类ios中,可以使用下列打开模式的公有枚举成员: in 0x01 输入 out 0x02 输出 ate 0x04 将指针置于文件未 app 0x08 追加 binary 0x80 打开二进制文件 一般情况,将几种模式组合使用。更多的成员参考306页。,例:打开一个文件result文件 ifstream infile; infile.open(“result”); 等价于: infile.o

4、pen(“result”,ios :in); /打开输入文件 infile.open(“result”,ios :in | ios : : binary); /打开二进制输入文件,说明: 对于类ifstream的对象,打开文件时默认模式in。 对于类ofstream的对象,打开文件时默认模式out。 C+在文件类中提供的4个文件流类中同时重载一个带缺省参数的构造函数: void fstreambase :fstreambase (char *, int, int=filebuf :openprot) void ifstream :ifstream (char *, int=ios :out,

5、int) void ofstream :ofstream (char *, int=ios :in, int) void fstream :fstream (char *, int, int) 定义对象时,同时也打开了一个文件。,4. 若文件打开出错,则返回一个NULL值。因此常常用下列格式提示出错: ifstream infile; infile.open(“result”); if (! infile) cour(“cannot open this file”); exit(1); 其中,exit(1) 为返回编辑状态,1可省。,14.2.2 文件的关闭 ifstream infile;

6、infile.open(“result”); if (! infile) cour(“cannot open this file”); exit(1); infile. close();,14.3 文件的读写 使用两个读写运算符: 例14-1:模拟DOS命令,将*.cpp 再复制一份,新文件名为:* new.cpp 算法: 打开输入文件 打开输入/输出文件 文件复制 文件关闭,方法一: #include “fstream.h“ #include “iostream.h“ #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3

7、) cout“input error“endl; exit(1); ,ifstream infile(argv1); /定义对象并初始化,打开模式省 if (! infile) coutch) outfilech; infile.close(); outfile.close(); ,方法二: #include “fstream.h“ #include “iostream.h“ #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3) cerr“input error“; exit(1); fstream infile,out

8、file; /先定义文件类对象 infile.open(argv1,ios:in); /不是构造函数,不能省略模式 outfile.open(argv2,ios:out);,if (!infile|!outfile) cerr“Cont open file “endl; exit(1); char ch; while (infile.get(ch) outfile.put(ch); infile.close(); outfile.close(); ,14.5 文件读写函数 14.5.1 二进制文件读写函数 istream 说明:第一个参数为内容,第二个参数为读写的字节数。,例14-2:用二进制

9、读写函数完成文本文件的复制 #include #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3) cerr“input error“; exit(1); fstream infile, outfile; infile.open(argv1,ios:in | ios:binary); outfile.open(argv2,ios:out | ios:binary);,if (! infile | ! outfile) /文件打开有错,对象为0 cerr“Cont open file “endl; exit(1); cha

10、r ch1024; do infile.read(ch,1024); if(infile.eof() /文件结束为真 int n=infile.gcount(); /把最后不够1024字节时的字节取出 outfile.write(ch,n); break; ,else outfile.write(ch,1024); while(1); infile.close(); outfile.close(); ,例14-3:用二进制读写函数完成数据文件的写(p318) 生成10个数,进行排序,然后保存到文件中 #include #include “stdlib.h” #include #include

11、#include “ex14_5.h” /见P314中,void main() int savedate(int *, int,char *); int *iarray; iarray=Generatedatas(10); /生成10个随机数 if (! iarray) /不成功时iarray为0 cerr”memory allocation error, press any key to exit n”; getch(); /按任意键返回 exit(1); ,sortdata(iarry,10); /排序,函数子程序见p315 savedata(iarray,10,”datas1.dat”)

12、; /保存排序后的数据 releasememory(iarray); /用后释放 int savedata(int *ip, int n, char *fname) ofstream of; of.open(fname, ios : : out | ios : : binary); if(!of) cerr”file creating eror !”endl; return 0; of.write(char *) ip,n*sizeof(int); /对数据指针强制转换成字符指针, 按字节数写入对象建立的文件 of.close(); return 1; ,int *Generatedate(i

13、nt n) /因为返回的是指针,因此函数也是指针函数 int *ip; ip=new intn; if(!ip) return 0; randomize( ); /要使用头文件stdlib.h for(i=0;in;i+) ipi=rand( )%1000; return ip; void ReleasMemory(int *ip) delete ip;,例14-4:用二进制读写函数完成数据文件的读 #include #include void main() int loaddata(int *,char *); void showdata(int *, int); int iarray10,

14、i; i=loaddata(iarray,”data1.dat”); /从文件中读数据到数组 showdata(iarray,i); /将读出的数据显示 ,int loaddata(int *ip, char *fname); ifstream ifs; int i=0; ifs.open(fname, ios: : in + ios : : binary); if (! ifs) cerr”file opening error !”endl; return 0; ,while(1) ifs.read((char *)ip, sizeof(int); /每次读两个字节且强制转换 if(ifs.

15、eof() break; ip+; i+; /统计数据个数 return i; ,void showdata(int *ip, int n) for(int i=0; in; i+) coutipi” “; coutendl; 说明:以上函数使用了数组和指针之间的相互传递。,14.5.2 文本文件读写 例14-5:编写,将任意程序中的标识符取出显示的函数程序 #include #include “ctype.h” void Getident(ifstream infile, char *s) /对象和存放标识符指针 char ch; infilech; /读第一个字符 if(isalpha(c

16、h)|ch=_) /用头文件“ctype.h” do / isalpta(ch)是字母为真,*s+=ch; infile.get(ch); /取下一个字符 while(isalnum(ch)|ch=_); /字母、数字或下划线循环 *s=0; /置串结束标记 infile.putback(ch); /返还最后一次多读的字符 ,例14-6:计算10以内的自然数的平方根,且保存到文件data.txt中 #include #include “fstream.h“ #include “stdlib.h“ #include “math.h“ void main() ofstream outfile; o

17、utfile.open(“data.txt“,ios:out); if (! outfile) cout“Cont open file “endl; exit(1);,for(int k=1;k11;k+) outfilektsqrt(k)endl; coutktsqrt(k)endl; outfile.close(); ,例14-7:将以上数据文件取出显示 方法1: #include #include “fstream.h“ #include “stdlib.h“ #include “math.h“ void main() int a;float b; ifstream infile;,in

18、file.open(“data.txt“,ios:in); if (! infile) coutab; coutatbendl; infile.close(); ,方法2: #include #include “fstream.h“ #include “stdlib.h“ void main() int a;float b; int k=0; ifstream infile; infile.open(“data.txt“,ios:in); if (! infile) cout“Cont open file “endl; exit(1);,while(1) infileab; coutatben

19、dl; k+; if(infile.eof() break; infile.close(); ,方法3: #include #include “fstream.h“ #include “stdlib.h“ void main() int a;float b; int k=0; ifstream infile; infile.open(“data.txt“,ios:in);,if (! infile) coutab; coutatbendl; k+; infile.close(); ,例14-8:建立一个数据文件,有姓名,三门课程成绩,利用该文件求每人平均成绩 将以上数据文件取出求平均且显示 #

20、include #include “fstream.h“ #include “stdlib.h“ void main() int a,b,c; char name10; ifstream infile; infile.open(“num.txt“,ios:in);,if (! infile) coutnameabc; coutnametatbt(a+b+c)/3endl; if(infile.eof() break; infile.close(); ,例14-9:将从键盘上输入的10个数据存入文件 #include “fstream.h“ void main() int k,n; ofstream outfile; outfile.open(“data.txt“,ios:out); if (! outfile) cerr n; outfilen” ”; outfile.close(); ,总结: 二进制读写方式适用于什么情况? ASCII码读写方式适用于什么情况? 管理文件包括: 复制、连接、修改、替换、删除、提取、插入、查 找、统计、显示、加密、粘贴板、回收站、保存、输 入、记忆输入。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1