欢迎来到天天文库
浏览记录
ID:51065414
大小:31.00 KB
页数:8页
时间:2020-03-09
《文件结构化存储技术与应用.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、文件结构化存储技术与应用(转载)VC++2010-12-0810:02:22阅读0评论0 字号:大中小 订阅自从Windows系统推出以后,微软公司就一直致力于完善和采用新的文件存储方法,其中结构化存储是微软公司最为推崇的,该技术采用COM技术架构,当前广泛使用的Office文件都是采用结构化的存储方式,同时微软公司为推广这一存储方法的应用,在WindowsSDK中提供了该技术的整套帮助文件和相关资料。所谓结构化存储方法,实际是把树状文件系统的原理应用到单个的文件中,使得单个文件也能象文件系统一样包含"子目录","子目录"还可以包含更深层次的"子目录",各个"目录"可以含多个文件,
2、把原来需要多个文件存储的内容按树状结构和层次保存到一个文件中去。对清楚磁盘存储的用户来说,很容易理解这种存储方法可以极大程度的提高磁盘空间使用效率。另外便于在单个文件就能明确内容的归属关系和分类关系,再就是在软件分发过程不需要带一大批的分发文件,可以把数据文件归结到一个文件中去。本文将阐述Windows提供的结构化存储的相关技术,并且用Delphi语言加以应用实现。一、结构化存储技术介绍在WindowsSDK中详细介绍了结构化存储的各个相关的知识,上面已经讲到该技术采用Com架构,所以提供的函数都用到接口,其中IStorage、Istream、IEnumSTATSTG是三个最重要的结
3、构化存储接口(Interface)。1、IStorageIStorage接口支持结构化存储文件创建和结构化文件管理的相关功能。它可以包含其它的多个IStorage,相当于文件系统中的"子目录",也可以包含下面要阐述的多个Istream,相当于文件系统的具体"单个文件"。一个结构化存储的文件可以用下图来表示它的结构。从上图我们可以看到任何一个结构化存储文件都存在一个根IStorage,在该接口下面可以包含多个一级子IStorage,一级子IStorage下可以包含多个二级子IStorage,依次延续,就形成了结构化存储文件的层次和树状结构,而每个IStorage下面可以含任意个Istr
4、eam即相当与文件系统中具体的单个文件。关于IStorage的主要函数有:1.1StgCreateDocfile该函数创建一个结构化存储的文件,并且返回IStorage接口,其函数格式为:HRESULTStgCreateDocfile(constWCHAR*pwcsName,//要创建的结构化存储文件名DWORDgrfMode,//结构化存储文件的访问模式DWORDreserved,//保留,必须为零IStorage**ppstgOpen//返回的IStorage接口变量);1.2StgOpenStorage该函数打开一个结构化存储的文件,并且返回IStorage借口,起函数格式为:
5、HRESULTStgOpenStorage(constWCHAR*pwcsName,//要打开的结构化存储文件IStorage*pstgPriority,//以前打开的IStorage一般为nilDWORDgrfMode,//文件打开的模式SNBsnbExclude,//代表SNB结构,可以为nilDWORDreserved,//保留,必须为0IStorage**ppstgOpen//返回的IStorage接口变量);1.3StgIsStorageFile该函数判断指定文件是否是按照结构化方式存储。其函数格式为:HRESULTStgIsStorageFile(constWCHAR*p
6、wcsName//需要判断的文件名);1.4CreateStorage该函数是IStorage接口提供的函数,它为IStorage创建一个下一个层次的IStorage,也即相当于创建"子目录"。其函数格式为:HRESULTCreateStorage(constwchar_t*pwcsName,//要创建的"子"IStorage的名称DWORDgrfMode,//"子"Istorage的访问模式DWORDreserved1,//保留,必须为零DWORDreserved2,//保留,必须为零IStorage**ppstg//返回的IStorage接口变量);1.5CreateStream
7、该函数是IStorage接口提供的函数,它为IStorage创建一个下属的IStream,也即相当于创建单个具体"文件"。其函数格式为:HRESULTCreateStream(constwchar_t*pwcsName,//要创建"子"Istream的名称DWORDgrfMode,//"子"IStream的访问模式DWORDreserved1,//保留,必须为零DWORDreserved2,//保留,必须为零IStream**ppstm//返回的IStre
此文档下载收益归作者所有