第七章_输入输出流解析.ppt

与文件指针有关的流类成员函数 为了随机读取二进制文件中数据,磁盘文件用一个指针表示当前要访问的位置。 每次读或写文件后会自动修改指针。使指针总是指向当前要访问的位置。 对于二进制文件,允许程序控制指针移动,实现随机访问文件。文件流类提供了有关文件指针的成员函数。 表7.7列出这些函数。 * 与文件指针有关的流类成员函数 这些函数名头或尾字母不是g就是p。 带g的用于输入,带p的用于输出。 对于输入输出文件不区分g和p。 函数参数文件中的位置和位移量以字节为单位,是长整型。 * 与文件指针有关的流类成员函数 参照位置表示以什么作为移动起点。ios类定义为: ios::beg 以文件开始为起点,这是默认值。 ios::cur 以指针当前位置为起点。 ios::end 以文件结尾为起点。 例: infile.seekg( 100 ); infile.seekg( -50,ios::cur); outfile.seekp( -75,ios::end); * 与文件指针有关的流类成员函数 随机访问二进制数据文件 利用流类的成员函数移动文件指针,实现随机访问文件中任何一个字节里的数据。 例:有五个学生的数据,要求: 把它们写入磁盘文件 从磁盘文件读第1,3,5学生数据并显示 修改第3 个学生的数据并保存到原来位置 从磁盘文件读入修改过的5个学生数据并显示 * 与文件指针有关的流类成员函数 struct student { int num; char name[20]; float score;}; int main() {int i; student stud[5]={1001,“Li”,85,1002,“Fun”,97.5, 1004, Wang”,54, 1006,Tan,76.5,1010,ling,96}; fstream iofile(stud.dat,ios::in|ios::out|ios::binary); if(!iofile) {cerropen error!endl; abort(); } * 与文件指针有关的流类成员函数 for(i=0;i5;i++) iofile.write((char *)stud[i],sizeof(stud[i])); student stud1[5]; for(i=0;i5;i=i+2) {iofile.seekg(i*sizeof(stud[i]),ios::beg); iofile.read((char *)stud1[i/2],sizeof(stud1[i])); coutstud1[i/2].num“ ”stud1[i/2].name“ ”stud1[i/2].scoreendl; } coutendl; stud[2].num=1012; strcpy(stud[2].name,Wu); stud[2].score=60; * 与文件指针有关的流类成员函数 iofile.seekp(2*sizeof(stud[0]),ios::beg); iofile.write((char *)stud[2],sizeof(stud[2])); iofile.seekg(0,ios::beg); for(i=0;i5;i++) {iofile.read((char *)stud[i],sizeof(stud[i])); coutstud[i].num stud[i].name stud[i].scoreendl; } iofile.close(); return 0; } * 与文件指针有关的流类成员函数 * 提纲 C++的输入和输出 标准输出流 标准输入流 文件操作与文件流 字符串流 * 字符串流 字符串流以内存中用户定义的字符数组(字符串)为输入输出对象,即将数据写入内存数组,或从内存字符数组读取数据。 字符串流也需要缓冲区,读取或写入时,流缓冲区中的数据不断增加,待缓冲区满或遇到换行符时,缓冲区中数据一起写入字符数组或赋予指定变量。 * 建立写字符串流对象 ostrstream类的构造函数原型是 ostrstream::ostrstream( char *bu, int n, int mode =ios::out); bu是指向字符数组首址的指针,n是指定流缓冲区的长度,第三个参数可省略,默认是ios::out。 例:ostrstream strout( ch1,20); 建立字符流对象strout,并与字符数组ch1关联(通过字符串流把数据写入字符数

文档评论(0)

1亿VIP精品文档

相关文档