VC++二进制文件的读写问题
我自己定义了一个类:classBookData{private:stringisbn;stringbookTitle;stringauthor;stringpublish...
我自己定义了一个类:
class BookData
{
private:
string isbn;
string bookTitle;
string author;
string publisher;
string dateAdded;
int qtyOnHand;
static double wholesale;
static double retail;
public:
BookData();
int returnIsbn();
string returnBookTitle();
string returnAuthor();
string returnPublisher();
string returnDateAdded();
};
并通过:
short int numOfBooks;
cout<<"请输入所要增加图书的数目:";
cin>>numOfBooks;
for (int i=0; i<numOfBooks; i++)
{
cout<<"请输入第"<<i+1<<"本书的信息:\n";
system("pause");
BookData bk;
fstream file;
file.open("BookLibrary.dat",ios::in|ios::out|ios::app|ios::binary);
if(!file)
{
cout<<"BookLibrary.dat can't open.\n";
abort();
}
file.write((char *)&bk,sizeof(bk));
file.close();
}
将数据保存到二进制文件中。
可是我不知道该怎样把他们读取出来, 请好心人指教~~
没有积分了~~ 万分感谢帮忙~~ 以后一定补上~~~
2楼的意思是说我应该把string类型的改为字符数组么? 这样可以么? 展开
class BookData
{
private:
string isbn;
string bookTitle;
string author;
string publisher;
string dateAdded;
int qtyOnHand;
static double wholesale;
static double retail;
public:
BookData();
int returnIsbn();
string returnBookTitle();
string returnAuthor();
string returnPublisher();
string returnDateAdded();
};
并通过:
short int numOfBooks;
cout<<"请输入所要增加图书的数目:";
cin>>numOfBooks;
for (int i=0; i<numOfBooks; i++)
{
cout<<"请输入第"<<i+1<<"本书的信息:\n";
system("pause");
BookData bk;
fstream file;
file.open("BookLibrary.dat",ios::in|ios::out|ios::app|ios::binary);
if(!file)
{
cout<<"BookLibrary.dat can't open.\n";
abort();
}
file.write((char *)&bk,sizeof(bk));
file.close();
}
将数据保存到二进制文件中。
可是我不知道该怎样把他们读取出来, 请好心人指教~~
没有积分了~~ 万分感谢帮忙~~ 以后一定补上~~~
2楼的意思是说我应该把string类型的改为字符数组么? 这样可以么? 展开
展开全部
你的class里面成员也有class,所以直接用write函数可能会出问题,对于这种情况可以使用MFC提供的“序列化”的功能,把一个class写入二进制文件
如果class里面的成员全是基本数据类型,用write函数写入文件不会出问题。
如果class里面的成员全是基本数据类型,用write函数写入文件不会出问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的我也不看了,给你个简单的例子,自己琢磨吧!
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
int ID;
int age;
};
void main()
{
student st;
st.ID = 0;
st. age = 18;
ofstream ofs("1.data", ios::binary | ios::out);
ofs.write((char*)&st, sizeof(st));
ifstream ifs("1.data", ios::binary | ios::in);
ifs.read((char*)&st, sizeof(st));
cout<<st.age<<endl<<st.ID<<endl;
}
注意不要用 fstream
用ifstream(输入流) 和 ofstream(输出流)
fstream很容易出错
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
int ID;
int age;
};
void main()
{
student st;
st.ID = 0;
st. age = 18;
ofstream ofs("1.data", ios::binary | ios::out);
ofs.write((char*)&st, sizeof(st));
ifstream ifs("1.data", ios::binary | ios::in);
ifs.read((char*)&st, sizeof(st));
cout<<st.age<<endl<<st.ID<<endl;
}
注意不要用 fstream
用ifstream(输入流) 和 ofstream(输出流)
fstream很容易出错
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对二进制的读写主要用iostream类成员函数read和write莱实现。这两个成员函数的原型为:
istream&read(char*buffer,int len);
ostream&write(const char* buffer,int len);
字符指针buffer指向内存一段存储空间。len是读写的字节数。
istream&read(char*buffer,int len);
ostream&write(const char* buffer,int len);
字符指针buffer指向内存一段存储空间。len是读写的字节数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用write写就用read读嘛。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询