想把这样一个结构的数据写入文件,是不是不能直接用file.Write写啊?
typedef struct _EventRecord
{
CString Time;
bool IsMessage;
bool IsRun;
CString Path[_MAX_PATH];
CString Message[100];
}EventRecord;
我感觉应该用序列化,查了些资料但是实在看不懂。哪位大虾能帮我写个样例啊?
typedef struct _EventRecord
{
CString Time;
bool IsMessage;
bool IsRun;
CString Path[_MAX_PATH];
CString Message[100];
}EventRecord;
我感觉应该用序列化,查了些资料但是实在看不懂。哪位大虾能帮我写个样例啊?
typedef struct _EventRecord
{
CString Time;
bool IsMessage;
bool IsRun;
CString Path;
CString Message;
}EventRecord;
调用Write方法写只能把EventRecord地址指向的信息写入
而CString并不是指向一个字符串指针
必须分开存
如
Write((LPCTSTR)EventRecordTime);
序列化是可以的。
typedef struct _EventRecord
{
CString Time;
bool IsMessage;
bool IsRun;
CString Path[_MAX_PATH];
CString Message[100];
void Serialize(CArchive &ar)
{ Time.Serialize(ar);
if(ar.IsStoring())
{
ar<<isMessage;
ar<<isRun;
}
else
{
ar>>isMessage;
ar>>isRun;
}
int i;
for(i=0;i<_MAX_PATH;i++)
Path[i].Serialize(ar);
for(i=0;i<100;i++)
Message[i].Serialize(ar);
}
}EventRecord;
你后面两个变量是不是应该是char数组啊?怎么是CString数组呢?
用CString存不了实际内容,里面指有一个字符的指针,应该改用char重新定义结构
typedef struct _EventRecord
{
CString Time;
bool IsMessage;
bool IsRun;
CString Path;
CString Message;
void Serialize(CArchive &ar)
{ Time.Serialize(ar);
if(ar.IsStoring())
{
ar<<isMessage;
ar<<isRun;
}
else
{
ar>>isMessage;
ar>>isRun;
}
Path.Serialize(ar);
Message[i].Serialize(ar);
}
}EventRecord;
保存到文件时,这样写:
EventRecord er;//已经写好内容的结构体
CFile file;
file.Open("***.***",CFile::modeWrite);
CArchive ar(&file,CArchive::store);
er.Serialize(ar);
ar.Close();
file.Close();
从文件中读取时:
CFile file;
file.Open("***.***",CFile::modeRead);
CArchive ar(&file,CArchive::load);
EventRecord er;
er.Serialize(ar);//er就是从文件中读取的结构体
ar.Close();
file.Close();
{
if(ar.IsStoring())
{
ar<<Time;
ar<<isMessage;
ar<<isRun;
ar<<Path;
ar<<Message;
}
else
{
ar>>Time;
ar>>isMessage;
ar>>isRun;
ar>>Path;
ar>>Message;
}
error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'bool' (or there is no acceptable conversion)
你可以这样,
if(ar.IsStoring())
{
char ch;
ar<<Time;
ch = isMessage;
ar<<ch;
ch = isRun;
ar<<ch;
ar<<Path;
ar<<Message;
}
else
{
char ch;
ar>>Time;
ar>>ch;
isMessage = ch;
ar>>ch;
isRun = ch;
ar>>Path;
ar>>Message;
}