详解C++编程中对二进制文件的读写操作

2020-01-06 13:50:15刘景俊

其实可以一次输出结构体数组的个元素,将for循环的两行改为以下一行:

 

 
  1. outfile.write((char*)&stud[0],sizeof(stud)); 

执行一次write函数即输出了结构体数组的全部数据。

abort函数的作用是退出程序,与exit作用相同。

可以看到,用这种方法一次可以输出一批数据,效率较高。在输出的数据之间不必加入空格,在一次输出之后也不必加回车换行符。在以后从该文件读入数据时不是靠空格作为数据的间隔,而是用字节数来控制。

[例] 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。

 

 
  1. #include <fstream>  using namespace std; 
  2. struct student  { 
  3. string name;  int num; 
  4. int age;  char sex; 
  5. };  int main( ) 
  6. {  student stud[3]; 
  7. int i;  ifstream infile("stud.dat",ios::binary); 
  8. if(!infile)  { 
  9. cerr<<"open error!"<<endl;  abort( ); 
  10. }  for(i=0;i<3;i++) 
  11. infile.read((char*)&stud[i],sizeof(stud[i]));  infile.close( ); 
  12. for(i=0;i<3;i++)  { 
  13. cout<<"NO."<<i+1<<endl;  cout<<"name:"<<stud[i].name<<endl; 
  14. cout<<"num:"<<stud[i].num<<endl;;  cout<<"age:"<<stud[i].age<<endl; 
  15. cout<<"sex:"<<stud[i].sex<<endl<<endl;  }