网站大量收购独家精品文档,联系QQ:2885784924

复合文档操作函数.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 的方式指定要排除

文档评论(0)

htfyzc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档