黄永峰《面向对象的程序设计》第10讲输入输出流(下).ppt
文本预览下载声明
* 第10讲 输入输出流 10.1 文件操作与文件流 10.2 字符串流* 参考教材的第13章后半部分 文件的概念。所谓“文件”指存储在外部介质上数据的集合。文件是外存的数据管理单位 文件类型 程序文件、数据文件 ASCII文件、二进制文件 10.1 文件操作与文件流 提问:如何选择二进制或ASCII文件? 10.1 文件操作与文件流 cin和cout能实现内存中的二进制数据和输入输出字符流之间的转换过程 10.1 文件操作与文件流 文件IO流 标准输入流 标准输出流 CIN COUT ASCII文件 二进制文件 Ifstream Ofstream fstream 文件流类与文件流对象 文件流是以文件作为I/O对象的数据流,每一个文件流都有一个内存缓冲区与之对应 输出文件流:程序?文件数据流 输入文件流:文件数据流?程序 提问:文件流和文件是同一概念吗? 10.1 文件操作与文件流 C++定义3种文件类,用于对文件的I/O操作 (1) ifstream类,支持文件输入;例:ifstream infile; (2) ofstream类,支持文件输出;例:ifstream infile; (3) fstream类,支持文件输入输出 文件操作:打开、关闭、读写和指针定位等 打开文件:为文件流对象和指定的文件建立关联,以便使文件流流向指定的磁盘文件,并指定文件工作方式 打开文件方式有2种 (1) 调用文件流的成员函数open。一般形式: 文件流对象.open(文件名,输入输出方式); 例:ofstream outfile; outfile.open(“f1.dat”,ios::out); (2) 文件流类在声明时,定义了带参数的构造函数,其中包含了打开磁盘文件的功能。因此在定义文件流对象时调用该构造函数来实现“三个功能” 例:ofstream outfile(“f1.dat”,ios::out); 10.1 文件操作与文件流 10.1 文件操作与文件流 说明 每一个打开的文件都有一个文件指针 可以用“位或”运算符“|”对输入输出方式进行组合 例:outfile.open(“f2.dat”,ios::app|ios::nocreate); 如果打开操作失败,open函数的返回值为0,如果是用调用构造函数的方式打开文件,则流对象的值为0 例:if(!outfile.open(“f2.dat”,ios::app)) {cout“open error”;exit(1);} 关闭文件操作 关闭文件用成员函数close。如outfile.close( ); 关闭是解除该磁盘文件与文件流的关联,原来设置的工作方式也失效,这样,就不能再通过文件流对该文件进行I/O 对ASCII文件 ASCII文件:文件每个字节中均以ASCII代码形式存储,即一个字节存放一个字符 程序可从ASCII文件中读出或写入若干个字符 ASCII文件的读写方法 用流插入运算符“”和流提取运算符“”输入或输出标准类型的数据到文件 用文件流的put(),get(),getline()等成员函数进行字符的读写 10.1 文件操作与文件流 提问:为什么“”和 “”可以用于文件流对象的I/O? 例. 有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组送到磁盘文件中存放。 例.从上例建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号 例.从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat中。再把它从磁盘文件读入程序,将其中的小写字母改为大写字母,再存入磁盘文件f3.dat。 二进制文件:内存中数据存储形式不加转换地传送到磁盘文件,又称为内存数据的映像文件或为字节文件。 打开时用ios::binary指定为以二进制形式。二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件 成员函数read和write读写二进制文件 istream read(char *buffer,int len); ostream write(const char * buffer,int len); 字符指针buffer指向内存中一段存储空间。len是读写的字节数。调用的方式为a.write(p1,50);b.read(p2,30); 10.1 文件操作与文件流 二进制文件的读写操作 例. 将一批数据以二进制形式存放在磁盘文件中 outfile.write((char*)stud[0],sizeof(stud)); 执行一次write函数即输出了结构体数组的全部数据 例. 将上例中以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显
显示全部