黄晓智 2016-06-29 09:22 采纳率: 12.5%
浏览 2151
已采纳

C++/MFC中结构体使用CString出现问题

我定义了如下结构体:

 struct u
    {

        CString  sNumber;
        CString sPass;
        int PRIOR;
    };

我在OnDestroy()函数中去将结构体中的三个变量写入到user.dat文件中,但是当我
再次读取文件中数据时,只有int类型的PRIOR有数据,CString类型拿不到数据。打断点的结果是,写入数据时,数据是成功写入的。

 CFile file;//创建一个CFile文件
    if (!file.Open(_T("./user.dat"),CFile::modeCreate|CFile::modeWrite))//判断是否有文件,return是必须有的
    {
        AfxMessageBox(_T("保存文件失败"));
        return;
    }
    CListCtrl *plist = (CListCtrl *)GetDlgItem(IDC_LIST);
    int i = 0,nCount = plist->GetItemCount();
    u user;
    // (int i = 0; i < nCount; i++)
    while (i<nCount)
    {
        user.sNumber = plist->GetItemText(i, 0);
        user.sPass = plist->GetItemText(i, 1);

        file.Write(&user, sizeof(user));//写入一个结构体
        ++i;

    }


    file.Close();
    user.PRIOR = plist->GetItemText(i, 2) == _T("高级");

我知道可以用char,但是更想使用CString类型。

  • 写回答

3条回答 默认 最新

  • 关注

    你写进去的只是cstring的地址,并没有把cstring的内容写进去,最简单的的可以把结构体内的cstring改为char类型的数组然后进行你现在的存法,第二种就是写数据时将结构体内的成员变量一个一个的写入,读取时也是一个一个的读取,就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • oyljerry 2016-06-29 10:21
    关注

    这个没办法,你CString写入文件,然后读取出来的时候,你要还原成CString,难度不小
    还是用char数组比较简单

    评论
  • threenewbee 2016-06-29 10:35
    关注

    用CArchive去序列化/反序列化MFC中的对象。
    http://anony3721.blog.163.com/blog/static/511974201132365517866/

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 基于python进行多背包问题的多值编码
  • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
  • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
  • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
  • ¥15 C语言:数据子序列基础版
  • ¥20 powerbulider 导入excel文件,显示不完整
  • ¥15 用keil调试程序保证结果进行led相关闪烁
  • ¥15 paddle训练自己的数据loss降不下去
  • ¥20 用matlab的pdetool解决以下三个问题
  • ¥15 单个福来轮的平衡与侧向滑动是如何做到的?