首先对你的问题进行分析,“怎样从一个文件中(已存在)读取若干对象,然后保存到一个对象数组里”
分为两大块,一个是读取已有文件,另一个是保存到对象数组中!
一、1.读取的文件有二进制文件和文本文件,这里介绍为了快速读取的二进制文件(缺点是你打开那文件,读不懂,文本文件可以很方便的看到,但是只要修改参数,一样的!)
2.读取对象,那么就是数据块的读写,所以就不说单字符,随机的方式了!
有两个函数!
读文件 istream &read(unsigned char* buf,int num);
写文件 ostream &write(unsigned char* buf,int num);
buf这个参数就是你的对象数组的指针,num就是你要读取的数据快字节数(可以用sizeof()来获得,比如你的对象是user1,其类是User,那么读取一个对象就是sizeof(User),可以用for循环来读取多个!)
二、保存到对象数组!这个应该很简单了,前面的buf指针指向这个数组就好了!举个具体的例子!
#include
#include
#include
class User
{
public: //为了简单,设为公有的了!你可以设一个函数来存储数据,这样可以访问私有
int num;
int age;
};
main()
{
ofstream out("test"); // ofstream 是输出文件流与下面的对应
if(!out)
{
cout<<"不能建立文件\n";
return 1;
}
User user1,user2;
user1.num=100;
user1.age=20;
out.write((char *) &user1.num,sizeof(int)); //这个是具体的写如过程
out.write((char *) &user1.age,sizeof(int));
out.close();
ifstream in("test"); // 同上的,是一个输入文件流
if(!in)
{
cout<<"不能打开文件\n";
return 1;
}
in.read((char *) &user2.num,sizeof(int));//读取刚才所存的对象,实现多个的可以用for循环!
in.read((char *) &user2.age,sizeof(int));
cout<
return 0;
}
验证过了,可以的!!!!
for循环可以不一定要到文件尾啊,可以是你只想读出的对象数啊!
在文件结束位置有个标志位,EOF,使用eof()可以检测到,如你已经声明好的了
in.eof()到文件尾了,则返回1,没有则是0!
for循环,依次读取对象的各个数据成员,直到文件结束为止。