探讨:有关 Doc/View 框架的文件

palluo 2004-05-13 01:17:50
最近在工作中发现,在 Doc/View 框架生成的MFC程序中,被保存的文件在没有被添加内容的情况下会自动变大,这是为什么?有没有解决办法?

据我所知:MFC内部使用了 结构化 存储,结构化存储有一个特点就是文件只会变大,不会变小。但在我的程序中,我没有对文档增加任何东西,文件还是会变大,但大到一定程度就不会变大了。
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
palluo 2004-06-18
  • 打赏
  • 举报
回复
能不能更清楚一点,比如这段代码应该放在什么位置。
bluebohe 2004-06-14
  • 打赏
  • 举报
回复
重新生成一下复合文档即可

USES_CONVERSION;
LPSTORAGE pStorageNew = NULL;
//生成新的复合文档
HRESULT hResult = StgCreateDocfile( NULL, STGM_CREATE|STGM_READWRITE|
STGM_DIRECT|STGM_SHARE_EXCLUSIVE, 0, &pStorageNew);
if( (hResult != NOERROR) || (pStorageNew == NULL) )
return RET::NO;
//递归拷贝根及其流对象和存储对象
hResult = m_pRootStg->CopyTo(NULL, NULL, NULL, pStorageNew );
if( FAILED( hResult))
{
pStorageNew->Release();
return RET::NO;
}
STATSTG st;
m_pRootStg->Release();
m_pRootStg = NULL;
pStorageNew->Stat( &st, 0 );//将根存储对象信息填充STATSTG结构
pStorageNew->Release();

// 删除原文件
if( DeleteFile(i_strPath) == 0)
return RET::NO;

TCHAR szTemp[MAX_PATH];
WideCharToMultiByte(CP_ACP, 0, st.pwcsName, -1, szTemp, MAX_PATH, NULL, NULL);

// 移动现文件到原文件位置
if( MoveFile(szTemp, i_strPath) == 0 )
return RET::NO;
if( OpenCompFile(i_strPath) == RET::NO)//重新打开该复合文档
return RET::NO;


palluo 2004-06-14
  • 打赏
  • 举报
回复
不是我再呼这点磁盘空间,而是这些文件需要远程(可能通过公网)进行传送,这样大的文件实再无法让人忍受呀。
sboom 2004-06-12
  • 打赏
  • 举报
回复
我用VC1年多始终也没有领悟到doc/view的具体。
enoloo 2004-06-12
  • 打赏
  • 举报
回复
正常情况下应该不会呀。一个简单的记事本程序(文本),保存之后你再随便打开,都是那个保存时候的样子。doc是通过serialize机制来保存东西的,文档的保存按照你程序定义的结构来进行。比如你串行化5个对象的数据,那么doc的这套机制能够保证读/写的时候能够按照正确的顺序在文件和你的程序中串行化的每个对象之间沟通数据。

一般的情况,在C***Doc::Serialize(***)
{
obj1.Serialize(***);
obj2.Serialize(***);
//...

}
bluebohe 2004-06-12
  • 打赏
  • 举报
回复
结构化存储的文件由它自己来维护这个文件,不管他是大了还是小了,按照给定的接口去读取,就没有错的,大小不必关心,想来你也不在乎这么点磁盘空间吧?
autoegg 2004-05-13
  • 打赏
  • 举报
回复
哦,这个倒没有注意,楼主用最基本的fstream试过吗?这样也会增大?
xjy521 2004-05-13
  • 打赏
  • 举报
回复
学习
lgchina97 2004-05-13
  • 打赏
  • 举报
回复
没有吧,我做的程序好像没有啊,我看过了。

16,550

社区成员

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

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

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