我想把cstring数据存储到二进制文件中(不是在文本模式下但是没有理解)但是不能存储它

时间:2016-12-21 06:31:55

标签: c++ mfc

我的要求是将字符串数据存储到人类无法理解的.dat或.bin文件中。

我能够以二进制模式将整数存储到文件中,但不能以二进制模式存储字符串。

我尝试在MFC中使用CFile和CArchive 尝试使用fstream 尝试使用文件* 但是没能成功。

任何人都可以帮我这样做吗?

void CAuthenticationFileDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    static int count =0;
    DisplayKeys(count);

    CString strTotalKeys = m_keys->GetKey1() + m_keys->GetKey2() + m_keys-getkey3() + m_keys->GetKey4();
    m_vectKeys.push_back(strTotalKeys);

    m_EditKey1.SetFocus();
    CFile pFile;
    ASSERT (pFile != NULL);
    if (!pFile.Open (_T("foo.dat"), CFile::modeReadWrite | CFile::modeCreate|CFile::typeBinary))
    {   // Handle error
        return;
    }
    CArchive arStore(&pFile, CArchive::store);
    Serialize(arStore);

    delete m_keys;
    count++;

    if(count>0)
    {
        m_keys = new CKeys;
    }

    UpdateData(FALSE);
}

我有一个名为Ckeys的类,它有4个Cstring变量。 我试图存储它的对象。 无论如何我还好。我想将数据存储为二进制格式。

上面我提到OnintDialog()这是MFC CDialog虚函数,它在显示对话框之前被调用。我正在尝试读取文件并在列表控件中显示它。 (我无法解决这个问题) 在Button事件中我试图写出由用户给出的对象数据。

1 个答案:

答案 0 :(得分:0)

  1. 使用任何方法将字符串转换/编码为不可读的格式。
  2. 以下方法可以将CString值保存/恢复到文件:
  3. void WriteString(CString file, CString s)
    {
        CFile myFile(file, CFile::modeCreate | CFile::modeWrite);
        CArchive ar(&myFile, CArchive::store);          
        int sz = s.GetLength();
        ar << sz; // ar.Write(&sz, sizeof(int));
        ar.Write(s.GetBuffer(), sz);    
        ar.Close(); 
    }
    
    CString ReadString(CString file)
    {
        CString s;
        CFile myFile(file, CFile::modeRead);
        CArchive ar(&myFile, CArchive::load);           
        int sz = 0;
        ar >> sz; // ar.Read(&sz, sizeof(int));
        char* p = s.GetBuffer(sz);
        ar.Read(p, sz);    
        s.ReleaseBuffer(sz);    
        p = nullptr; // avoid using released buffer
        ar.Close();
        return s;
    }