ar.IsStoring()怎么判断是保存还是加载

liuqionline 2014-04-01 10:00:49
ar.IsStoring()怎么判断是保存还是加载
BOOL CDocument::OnOpenDocument(LPCTSTR lpszPathName)函数定义中:
CFile* pFile = GetFile(lpszPathName,
CFile::modeRead|CFile::shareDenyWrite, &fe);
CArchive loadArchive(pFile,CArchive::load| CArchive::bNoFlushOnDelete);
---------------------------------------------------
BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName)函数中定义:
CFile* pFile = NULL;
pFile = GetFile(lpszPathName, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe);
CArchive saveArchive(pFile,CArchive::store| CArchive::bNoFlushOnDelete);
---------------------------------------------------
_AFX_INLINE BOOL CArchive::IsLoading() const
{ return (m_nMode & CArchive::load) != 0; }
其中CArchive::load、CArchive::bNoFlushOnDelete是CArchive类的枚举变量Mode的值, enum Mode { store = 0, load = 1, bNoFlushOnDelete = 2, bNoByteSwap = 4 };可以用CArchive::load的形式来取得。
构造函数CArchive::CArchive(CFile* pFile, UINT nMode, int nBufSize, void* lpBuf) : m_strFileName(pFile->GetFilePath())中:
m_nMode = nMode;
这样看来,IsLoading必然返回1?
...全文
300 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeanJoy 2014-04-02
  • 打赏
  • 举报
回复
引用 5 楼 leo33853870pk 的回复:
[quote=引用 4 楼 schlafenhamster 的回复:] 如果是 (向导已经插入代码) { 写自己的 保存代码 默认 空 操作 }
老大,人家说的是,根据他的分析, CArchive::IsStoring()总是返回1,因为,bNoFlushOnDelete非0, 。。。 我也想破脑袋了。[/quote] 那我们来假设一下嘛 ,假设正在保存: CArchive saveArchive(pFile,CArchive::store| CArchive::bNoFlushOnDelete); 后 m_nMode = nMode = CArchive::store| CArchive::bNoFlushOnDelete = 0 | 2 = 2; 然后_AFX_INLINE BOOL CArchive::IsLoading() const { return (m_nMode & CArchive::load) != 0; } 就是return (2 & 1) !=0 --> return 0!=0; -> return false; 因此此时IsLoading返回false,表示不是加载,而是保存。 与我们的假设一致,哪步有问题?
leo33853870pk 2014-04-01
  • 打赏
  • 举报
回复
我想明白了,|和&分别是按位或、按位与,而不是|| 、&&.
liuqionline 2014-04-01
  • 打赏
  • 举报
回复
IsLoading和IsStoring必然返回1?
leo33853870pk 2014-04-01
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
如果是 (向导已经插入代码) { 写自己的 保存代码 默认 空 操作 }
老大,人家说的是,根据他的分析, CArchive::IsStoring()总是返回1,因为,bNoFlushOnDelete非0,
_AFX_INLINE BOOL CArchive::IsLoading() const
{ return (m_nMode & CArchive::load) != 0; }
这里,
m_nMode = nMode;
而nMode的值为:
CArchive::store |  CArchive::bNoFlushOnDelete
或者
CArchive::load |  CArchive::bNoFlushOnDelete
无论nMode的值是哪一个,都会导致CArchive::IsLoading()的返回值是1, 因为的值非0,那么bNoFlushOnDelete和CArchive::store 相或 的值非0,和 CArchive::load 相或 的值也非0. 照这样分析的结果 ,CArchive::IsLoading()的返回值真的只有1. 我也想破脑袋了。
schlafenhamster 2014-04-01
  • 打赏
  • 举报
回复
如果是 (向导已经插入代码) { 写自己的 保存代码 默认 空 操作 }
liuqionline 2014-04-01
  • 打赏
  • 举报
回复
知道啊,但是这里是想要分析这个函数内部的实现代码啊。
schlafenhamster 2014-04-01
  • 打赏
  • 举报
回复
IsStoring() "正在保存吗?" Return Value Nonzero if the archive is currently being used for storing; otherwise 0.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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