COM编程之复合文件
来源:互联网 发布:手机淘宝如何快速抢购 编辑:程序博客网 时间:2024/05/21 16:56
1. 原理:磁盘文件组织方式与复合文件组织方式:
2. 工具:VC自带的“复合文件浏览器”:DFView(没有实现国际化,文件全路径名不得出现中文)
3. 方法:
WIN API 函数
功能说明
StgCreateDocfile()建立一个复合文件,得到根存储对象StgOpenStorage()打开一个复合文件,得到根存储对象StgIsStorageFile()判断一个文件是否是复合文件
IStorage 函数
功能说明
CreateStorage()在当前存储中建立新存储,得到子存储对象CreateStream()在当前存储中建立新流,得到流对象OpenStorage()打开子存储,得到子存储对象OpenStream()打开流,得到流对象CopyTo()复制存储下的所有对象到目标存储中,该函数可以实现“整理文件,释放碎片空间”的功能MoveElementTo()移动对象到目标存储中DestoryElement()删除对象RenameElement()重命名对象EnumElements()枚举当前存储中所有的对象SetElementTimes()修改对象的时间SetClass()在当前存储中建立一个特殊的流对象,用来保存CLSID(注5)Stat()取得当前存储中的系统信息Release()关闭存储对象IStream 函数
功能说明
Read()从流中读取数据Write()向流中写入数据Seek()定位读写位置SetSize()设置流尺寸。如果预先知道大小,那么先调用这个函数,可以提高性能CopyTo()复制流数据到另一个流对象中Stat()取得当前流中的系统信息Clone()克隆一个流对象,方便程序中的不同模块操作同一个流对象Release()关闭流对象 WIN API 补充函数功能说明WriteClassStg()写CLSID到存储中,同IStorage::SetClass()ReadClassStg()读出WriteClassStg()写入的CLSID,相当于简化调用IStorage::Stat()WriteClassStm()写CLSID到流的开始位置ReadClassStm()读出WriteClassStm()写入的CLSIDWriteFmtUserTypeStg()写入用户指定的剪贴板格式和名称到存储中ReadFmtUserTypeStg()读出WriteFmtUserTypeStg()写入的信息。方便应用程序快速判断是否是它需要的格式数据。CreateStreamOnHGlobal()内存句柄 HGLOBAL 转换为流对象GetHGlobalFromStream()取得CreateStreamOnHGlobal()调用中使用的内存句柄4. 源码1:写一个复合文件
5. 源码2:读一个复合文件
需要加入头文件:
函数体:
6. 扩展
MsgEx.db为QQ聊天记录的内容,我们可以用DFView查看,但是是十六进制的,要经过解码
- COM编程之复合文件
- COM 组件设计与应用1 - 起源及复合文件
- COM 组件设计与应用1 - 起源及复合文件
- 起源及复合文件-COM 组件设计与应用(一)
- COM 组件设计与应用----起源及复合文件
- COM编程之IDispatch
- Oracle pl/sql编程 7---复合变量之记录类型
- COM编程之IUnknown接口
- COM编程之二 接口
- COM编程之三 QueryInterface
- Windows编程之COM组件
- 关于COM中的复合文档
- 关于COM中的复合文档
- COM 组件设计与应用(一)起源及复合文件
- COM 组件设计与应用(一)起源及复合文件
- COM 组件设计与应用(一)——起源及复合文件
- COM 组件设计与应用(一)起源及复合文件[转贴]
- COM 组件设计与应用(一)---起源及复合文件
- public、private、protected属性与public、private、protected继承
- javaz中背景图片的添加
- 保持一颗平常心
- c#内存管理,用空间换时间
- 享受一个人的美!
- COM编程之复合文件
- 【ZT】哈希的原理和代价
- CMenuEx cpp源码
- 自己封装MFC的CSize、CPoint、CRect类
- Active Accessibility
- 最近十年50本计算机图书
- 三生石
- DisplayTag使用指南(一) DisplayTag简要介绍
- iframe透明背景