上面第一行中的a是输出文件流对象,write函数将字符指针p1所给出的地址开始的50个字节的内容不加转换地写到磁盘文件中。在第二行中,b是输入文件流对象,read 函数从b所关联的磁盘文件中,读入30个字节(或遇EOF结束),存放在字符指针p2所指的一段空间内。
[例] 将一批数据以二进制形式存放在磁盘文件中。
- #include <fstream> using namespace std;
- struct student {
- char name[20]; int num;
- int age; char sex;
- }; int main( )
- { student stud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};
- ofstream outfile("stud.dat",ios::binary); if(!outfile)
- { cerr<<"open error!"<<endl;
- abort( );//退出程序 }
- for(int i=0;i<3;i++) outfile.write((char*)&stud[i],sizeof(stud[i]));
- outfile.close( ); return 0;
- }
用成员函数write向stud.dat输出数据,从前面给出的write函数的原型可以看出: 第1个形参是指向char型常变量的指针变量buffer,之所以用const声明,是因为不允许通过指针改变其指向数据的值。形参要求相应的实参是字符指针或字符串的首地址。现在要将结构体数组的一个元素(包含4个成员)一次输出到磁盘文件stud.dat。&tud[i] 是结构体数组第i个元素的首地址,但这是指向结构体的指针,与形参类型不匹配。因此 要用(char *)把它强制转换为字符指针。第2个参数是指定一次输出的字节数。sizeof (stud[i])的值是结构体数组的一个元素的字节数。调用一次write函数,就将从&tud[i]开始的结构体数组的一个元素输出到磁盘文件中,执行3次循环输出结构体数组的3个元素。










