14.8.6 二进制文件的读写
对二进制文件进行读写主要是使用read函数和write函数,如示例代码14.29所示。
代码14.29 二进制文件读写BinaryReadAndWrite
<————————————-文件名:example1429.cpp——————————————-> 01 #include<iostream> 02 #include<fstream> 03 using namespace std; 04 main() 05 { 06 ofstream out("test. dat",ios_base:out|ios_base:binary);//创建ofstream流对象out 07 if(!out. is_open())//判断文件关联是否成功 08 { 09 cout<<"文件打开失败"; 10 return 0; 11 } 12 float f1=3. 141592f; 13 out. write((char*)&f1,sizeof(f1));//以二进制形式写入test.dat中 14 out. close();//关闭流 15 float f2=0; 16 ifstream in("test. dat",ios_base:in|ios_base:binary); 17 //创建ifstream流对象in,以便从test.dat中读取信息 18 if(!in. is_open())//判断文件关联是否成功 19 { 20 cout<<"读取文件失败"; 21 } 22 in. read((char*)&f2,sizeof(f2));//以二进制形式读入数据 23 cout. setf(ios_base:fixed); 24 cout<<f2<<endl;//标准输出,屏幕显示 25 in. close();//关闭流 26 return 1; 27 }
输出结果如下所示。
3.141592
【代码解析】代码14.29会在文件夹下生成二进制文件test.dat,用记事本程序打开后会发现里面是乱码。使用二进制文件存储一个float型值3.141592仅仅需要4个字节,而使用文本文件模式将使用8个字节。
代码第6和16行,ofstream类对象out和ifstream类对象in创建时,需要指定ios_base:binary模式,同时,在使用read函数和write函数时,必须将地址强制转换成指向char的指针。从这个意义上说get和put函数配对也可以完成对二进制文件的读写,但两个函数每次只能操作1个字符,所以要人为控制读写的字节数目,不如read函数和write函数用得方便。