关于文件写失效问题--MFC文件读写策略和缓存策略相关

BeginnerCpp 2005-05-10 05:50:50
各位兄弟,
我写了一个程序,
在程序中片断 :

TRACE("SaveInf\n");
m_cpListViewInfo->Trace();

CFile file;
CFileStatus status;
if( !file.Open((LPCTSTR)m_strFilePath, CFile::modeCreate|CFile::modeWrite ))
{
AfxMessageBox("保存设定失败!");
return false;
}

CArchive ar(&file, CArchive::store);
ar.WriteObject(m_cpListViewInfo);

ar.Close();
file.Close();

TRACE("After SaveInf\n");
m_cpListViewInfo->Trace();

m_cpListViewInfo->Trace()是一个函数,
实现打印内部成员到调试窗口的功能.



现在发现,
m_cpListViewInfo->Trace()表示数据确实是符合设定的(程序的其它部分改写了m_cpListViewInfo中内容)
但是磁盘文件中没有改变,依然是旧的记录.


使用调试工具深入到 ar.WriteObject(m_cpListViewInfo);
发现到一句Write(XXX)语句前都正常,
就是无法把东西写到磁盘上.



这个bug重现性很好,
每次可以重现,



一个值得关注的情况是 :
这个bug每次出现再我在程序中打开了新文件后,
所以我怀疑是不是和"文件系统的读写策略""文件缓存策略"有关.
盼赐教.
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeginnerCpp 2005-06-01
  • 打赏
  • 举报
回复
现在我已经弃用MFC中的序列化方式,
改用C++标准库来读写文件,
结贴
BeginnerCpp 2005-05-10
  • 打赏
  • 举报
回复
请问楼主: m_cpListViewInfo 对象对应的类(应该是从 CObject 派生的) 有没有添加序列化支持?

============

有,


m_cpListViewInfo是保存ListView界面的设定值,
用户可以程序运行时期动态调整内容,
在BOOL CRecordBookApp::InitInstance() 中加载文件初始化m_cpListViewInfo内容
在int CRecordBookApp::ExitInstance() 中保存文件最新的设置到m_cpListViewInfo去,


在程序只是"运行->关闭"时候,
运行正常,设置可以正常保存和加载,
但是如果"运行->打开文件->关闭"时候,
就无法保存设置了.


通过跟踪,
"TRACE("SaveInf\n");
m_cpListViewInfo->Trace();"
明明m_cpListViewInfo内容已经被更改了,
到了
"TRACE("After SaveInf\n");
m_cpListViewInfo->Trace();"
m_cpListViewInfo也可以证明自己是正确的,

所以最大的怀疑在
"ar.WriteObject(m_cpListViewInfo);"
通过跟踪,
直到"WriteFile(XXX)"之前都是正确的,
就是内容没有被更新到文件.

所以怀疑是不是我的程序"打开文件"这个操作,
导致的问题,比如文件的缓存啊,读写啊这些琐碎的事项


jerry 2005-05-10
  • 打赏
  • 举报
回复
请问楼主: m_cpListViewInfo 对象对应的类(应该是从 CObject 派生的) 有没有添加序列化支持?

BeginnerCpp 2005-05-10
  • 打赏
  • 举报
回复
up
BeginnerCpp 2005-05-10
  • 打赏
  • 举报
回复
win xp系统,
VS2003, MFC的SDI程序
每次只要"仅运行程序,不打开文件",上面代码就可以正常运行,
但是只要在运行期间打开了文件,上面代码一定无法正常运行,
表现在上面代码段创建的文件没有写入新内容.


请高手赐教MFC的文件策略
谢了.

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧