注册 登录
编程论坛 C++教室

C++对 对象的文件读写

w123401185 发布于 2013-04-07 12:11, 654 次点击
一段代码:
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;

class lei{
    string name;
    int id;
public:
    lei(){}
    lei(string name, int id): name(name), id(id){}
    void show(){
        cout << id << ',' << name << endl;
    }
    lei& operator=(const lei& e){
        if(this==&e)
            return *this;
        id = e.id;
        name = e.name;
        return *this;
    }

    friend
    ostream& operator <<(ostream& o, const lei& e) {
        o << e.id << ',' << e.name << endl;
    }
};

int main()
{
    lei l("haha", 1);
    lei a;   
    FILE* fp = fopen("infor.txt", "a");
    fwrite(&l, sizeof(lei), 1, fp);
    fclose(fp);
    fp = fopen("infor.txt", "r");
    fread(&a, sizeof(lei), 1, fp);  // 可能这个地方有问题,内存访问的错误吧! 请大神们详细的讲解一下,能否这样操作
    fclose(fp);
    cout << a;
}
9 回复
#2
锋了2013-04-07 13:35
回复 楼主 w123401185
程序代码:
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;

class lei{
    string name;
    int id;            //你这里想做什么呢,C++的类默认是public的,而你后面又是public
public:
    lei(){}
    lei(string name, int id): name(name), id(id){}
    void show(){
        cout << id << ',' << name << endl;
    }
    lei& operator=(const lei& e){
        if(this==&e)
            return *this;
        id = e.id;
        name = e.name;
        return *this;
    }

    friend
    ostream& operator <<(ostream& o, const lei& e) {
        o << e.id << ',' << e.name << endl;
    }
};

int main()
{
    lei l("haha", 1);
    lei a;   
    FILE* fp = fopen("infor.txt", "a");
    fwrite(&l, sizeof(lei), 1, fp);  //你这里用的是C语言的读写方法,为什么不用C++自己的呢。如果是用C的话用                              
    fclose(fp);                      //fprintf()和fscanf()比较好,初略的看了下,其他的就没有看到                     
    fp = fopen("infor.txt", "r");
    fread(&a, sizeof(lei), 1, fp);  // 可能这个地方有问题,内存访问的错误吧! 请大神们详细的讲解一下,能否这样操作
    fclose(fp);
    cout << a;
}
#3
rjsp2013-04-07 13:41
fwrite(&l, sizeof(lei), 1, fp); 就已经不对了

以 char* p = "abc" 举例
你要存的是p指向的"abc",而不是p本身
#4
w1234011852013-04-07 17:41
回复 2楼 锋了
C++的类默认是private的吧! 我记得。
如果我想读写一个数据块,该怎么操作。 C++中是否提供函数?
#5
w1234011852013-04-07 17:43
回复 3楼 rjsp
我只是模仿着C中对结构体的读写操作。 请问C++中能否对一个数据块进行读写。 比如要对一个类的实例进行读写操作。  C++可否提供这样的函数
#6
邓士林2013-04-07 22:26
文件的打开与关闭首先你要为文件流和指定的文件建立关联,然后制定打开方式
#7
w1234011852013-04-08 10:02
回复 6楼 邓士林
恩。 我貌似找到方法了,正在调试。
#8
rjsp2013-04-08 12:06
以下是引用w123401185在2013-4-7 17:43:31的发言:

我只是模仿着C中对结构体的读写操作。 请问C++中能否对一个数据块进行读写。 比如要对一个类的实例进行读写操作。  C++可否提供这样的函数

这个和C++无关,即使在C中,也不是所有结构体都可以这么操作的。
#9
w1234011852013-04-09 13:06
回复 8楼 rjsp
我大概是明白了,最近有些忙。 过些时间我调试好了再来发布跟大家分享。
#10
明天更好山鹰2013-04-09 17:45
围观
1