- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
复合文档操作函数
复合文档操作函数
复杂的结构化存取(一)
2009-06-05 13:52:05 阅读(14) 发表评论
之所以说复杂, 就是区别与以前谈到的 结构化文件存取; 这种复杂的结构化文件也有叫做复合文档.
有些文档不是结构化的, 譬如记事本文件; 结构化的档可以分为以下几类:
标准结构化文档、自定义结构化文档(譬如 bmp 文件)和复合文档.
这里要谈到的结构化储存(复合文档)是由 Windows 系统通过 COM 提供的, 它能完成像 Windows 目录结构一样复杂的文件结构的存取; 提示一下 Windows 的目录结构: 一个目录下可以包含子目录和文件, 然后层层嵌套...
有时我们要存储的文件也可能会层层分支, 具体的文件内容也可能五花八门, 譬如分支当中的某个文件是张图片、是一个字符串列表、是一个记录(或叫结构)等等, 存储这样的文件内容恐怕用数据库也是无能为力的.
这种复合文件支持多线程, 不同的进程中的不同线??可以同时访问一个复合文件的不同部分.
复合文件最典型的实例就是 OLE(譬如在 Word 中可以嵌入电子表格); 这也或许是这种复合文件的来由.
或许有了这个东西, 出品属于自己的文件格式就成了轻而易举的事情了.
存取和访问复合文档主要使用定义在 Activex 单元的三个 COM 接口:
IStorage (类似于 Windows 的目录, 也就是文件夹);
IStream (类似于目录中的文件, 不过在这里都是流, 每个流至少要占用 512 字节);
IEnumStatStg (用于列举 IStorage 的层次结构)
接口 又是一个复杂的概念, 暂时把它认作是一组函数的集合吧.
下面罗列出了所有相关的函数(现在还没有全部掌握, 学习过程中再慢慢注释):
IStorage 中的函数:
双击代码全选
//创建一个子 IStorage 接口
function CreateStorage(
pwcsName: POleStr; {指定子 IStorage 接口的名称}
grfMode: Longint; {指定访问模式}
dwStgFmt: Longint; {保留, 须是 0}
reserved2: Longint; {保留, 须是 0}
out stg: IStorage {返回子 IStorage 接口}
): HResult; stdcall;
//打开当前 IStorage 的子 IStorage
function OpenStorage(
pwcsName: POleStr; {指定子 IStorage 接口的名称}
const stgPriority: IStorage; {已存在的 IStorage 接口, 一般为 nil}
grfMode: Longint; {指定访问模式}
snbExclude: TSNB; {是个指针, 一般为 nil; 好像是指定要排除的元素}
reserved: Longint; {保留, 须是 0}
out stg: IStorage {返回打开的子 IStorage 接口}
): HResult; stdcall;
//创建一个子 IStream 接口
function CreateStream(
pwcsName: POleStr; {指定子 IStream 接口的名称}
grfMode: Longint; {指定访问模式}
reserved1: Longint; {保留, 须是 0}
reserved2: Longint; {保留, 须是 0}
out stm: IStream {返回子 IStream 接口}
): HResult; stdcall;
//打开当前 IStorage 的子 IStream
function OpenStream(
pwcsName: POleStr; {指定子 IStream 接口的名称}
reserved1: Pointer; {保留, 须为 nil}
grfMode: Longint; {指定访问模式}
reserved2: Longint; {保留, 须是 0}
out stm: IStream {返回子 IStream 接口}
): HResult; stdcall;
//复制 IStorage, 该函数可以实现“整理文件,释放碎片空间”的功能
function CopyTo(
ciidExclude: Longint; {要排除的元素数, 可以是 0}
rgiidExclude: PIID; {好像是以 PIID 的方式指定要排除
您可能关注的文档
- 决策系统商业系统管理员岗位试题(考试题哦).doc
- 凌云7号天麻栽培技术.doc
- 减肥方法及食谱.doc
- 减肥 坚持就是胜利.doc
- 减肥美容小贴士.doc
- 几大三维软件优缺点对比.doc
- 几篇有价值的文章.doc
- 凯恩斯政策.doc
- 刀剑外传攻略加宝石合成.doc
- 分众营销中国啤酒业再突破之道.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)