一些操作系统如DOS区分二进制文件和文本文件。文本文件将一切内容都保存为文本,因此像54,325这样很大的数字就保存为一串数字('5','4',',','3','2','5').这样效率很低,但是优点是可以像DOS命令type这样简单的程序来阅读文本。
为了帮助文件系统区分二进制文件和文本文件,C++提供了ios::binary标志。在许多系统上这个标志都被忽略了,因为所有数据都以二进制数据存储。在一些稍微严谨的系统上,ios::binary标志是非法的,不能通过编译。
二进制文件不仅能存储整数和字符串,而且还能存储整个数据结构。可以使用fstream的write()方法一次写入所有数据。
如果你使用write,你可以使用read来恢复数据。然而这些参数都需要字符指针做参数,所以必须把类的地址强制转化成字符指针。这些函数的第二个参数是要写入的字符个数,这个个数可以由sizeof来确定。
把一个类写入一个文件的实例:
#include<fstream>
#include<iostream>
using namespace std;
class Animal
{
public:
Animal(int weight,long days):itsWeight(weight),itsNumberDaysAlive(days){};
~Animal(){}
int GetWeight() const{return itsWeight;}
void SetWeight(int weight){itsWeight=weight;}
long GetDaysAlive()const{return itsNumberDaysAlive;}
void SetDaysAlive(long days){itsNumberDaysAlive=days;}
private:
int itsWeight;
long itsNumberDaysAlive;
};
int main()
{
char fileName[80];
cout<<"please enter the file name:";
cin>>fileName;
ofstream fout(fileName,ios::binary );
if(!fout)
{
cout<<"Unable to open"<<fileName<<"for writing\n";
return (-1);
}
Animal Bear(50,100);
fout.write ((char*)&Bear,sizeof Bear);
fout.close();
ifstream fin(fileName,ios::binary );
if(!fin)
{
cout<<"Unable to open"<<fileName<<"\n";
return -1;
}
Animal BearTwo(1,1);
cout<<"bearTwo weight"<<BearTwo.GetWeight()<<endl;
cout<<"BearTwo days:"<<BearTwo.GetDaysAlive ()<<endl;
fin.read ((char*)&BearTwo,sizeof BearTwo);
cout<<"BearTwo weight:"<<BearTwo.GetWeight() <<endl;
cout<<"BearTwo days:"<<BearTwo.GetDaysAlive ()<<endl;
fin.close ();
return 0;
}
原文链接: https://www.cnblogs.com/zdzlovemonkey/archive/2012/10/29/2744624.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/67470
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!