文档详情

C语言大学教程--C++语言第23章.ppt

发布:2019-03-01约3.26万字共122页下载文档
文本预览下载声明
* 输入数字时产生的错误 过多的字符 没有输入的输入 输入长度的错误 * 常见的文件I/O错误 文件不存在 新文件使用的文件名已经作为现有的文件名 磁盘空间不够 驱动器上没有磁盘 * * 在创建文件流对象时,可以把它与磁盘上的文件关联起来。还可以创建与特定文件没有关联的文件流对象,在程序运行中使用成员函数将其和特定文件建立关联。流与文件的关联关系如图5.6所示。连接为了读写磁盘文件,该文件必须被打开,操作系统将其关联到程序中,并根据设定的方式使用该文件。将文件流关联到具体文件的功能可以由打开函数完成。可以修改与文件流关联的磁盘文件,也可以在不同时间用同一个ofstream对象写入不同的文件。程序不需要文件时,文件应从该流中断开,下面我们讨论文件的打开和关闭操作。 * * prot决定文件的访问方式,取值为: 0 普通文件 1 只读文件 2 隐含文件 3 系统文件 一般情况下,该访问方式使用默认值。 * * 图 例如: istream input ; …… beg end cur cur input . seekg ( -10 , ios :: end ) ; // 读指针从流的结尾,向前移动 10 个字节 istream 类操作流读指针的成员函数 二进制文件的随机读写 Eg: istream input ; long pos = input . tellg ( ) ; // 获取当前位置指针 input number ; // 读入一个整数,指针后移 4 字节 …… input . seekg ( pos ) ; // 指针返回原来位置 input number ; // 重读该整数 beg end cur … i-1 i i+1 … 200311 istream 类操作流读指针的成员函数 二进制文件的随机读写 ostream ostream :: seekp ( long pos ) ; 写指针从流的起始位置向后移动由参数指定字节 ostream ostream :: seekp ( long off , ios::seek_dir ) ; 写指针从流的seek_dir位置移动由 off 指定字节 ostream ostream :: tellp ( ) ; 返回写指针当前所指位置值 ostream 类操作流写指针的成员函数 二进制文件的随机读写 例 将Fibonnaci数列的前40项写入二进制文件fib.bin中,然后输出其中的奇数项,每行输出5个数。 #include iostream #include fstream #includeiomanip using namespace std; void main( ) { fstream iofile(fib.bin, ios::in|ios::out|ios::binary); if(!iofile) { coutCan not open file: fib.binendl; exit(1); } 例 续1 long pos = iofile.tellp( ); coutBegin posi=posendl; int f1=1, f2=1; for(int i=0; i20; i++) { iofile.write((char*)f1, sizeof(int)); iofile.write((char*)f2, sizeof(int)); f1=f1+f2; f2=f2+f1; } pos=iofile.tellp( ); //获取当前位置 coutEnd posi=posendl; 例 续2 iofile.seekp(0, ios::beg); //将读写位置指针重新定位于文件起始位置 for(int i=0; i20; i++) { iofile.read((char*)f1, sizeof(int)); //读入 iofile.seekg(sizeof(int), ios::cur); //移动 coutsetw(10)f1; if((i+1)%4==0) coutendl; } iofile.close( ); } 2. 与文件指针有关的流成员函数 文件流提供一些有关文件指针的成员函数: infile.gcoun
显示全部
相似文档