我的要求是将字符串数据存储到人类无法理解的.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事件中我试图写出由用户给出的对象数据。
答案 0 :(得分:0)
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;
}