复合文档格式研究之02-复合文档的主要构成

李懿 Excel学习 2016-07-05

复合文档格式研究之02-复合文档的主要构成_第1张图片

微信扫一扫
关注该公众号

复合文档的组成部分

 

之前介绍了一些计算机关于存储的基础知识(回复:复合文档01 可以查看),如果不是太了解,问题也不是很大。但是需要有一个概念,就是数据在计算机中并非顺序存储,要获取一段完整的数据,需要有一个索引表(也就是分区表FAT)将各个零散的数据串起来。

 

本章的内容,在大多数搜索到的文档或者个人博客中随处可见。如果你理解了第一章所述的内容,那么这个结构就很容易理解了。

2.1 StorageStream

我之所以没有使用中文,是确实不知道怎么翻译,官方文档也只有英文版,别人的翻译也都比较别扭,容易让人联系到其他东西。

简单地说Storage相当于文件系统中的文件夹,Stream则相当于文件。因而Storage中是没有任何实质性的内容的,全在Stream里面。当然Storage下面还可以有Storage,就像文件夹下面还有其他文件加一样。

之所以要这样设计,是为了可以和容易往文档里面添加其他东西。比如说在Excel里面插入另一个Excel文件,按照Windows的办法就是创建一个目录,然后添加文件。在复合文档中也会有类似的操作。

我们暂且先记一下这两个东西吧,稍后我们会用实际的例子来看看。

2.2 Directory(目录)

这一部分存储空间是用来记录Storage和Stream的存储结构以及名称、大小、起始地址等信息,说白了就是一个Storage和Stream的索引,是它们的目录。

2.3 SectorsShort Sectors(扇区)

Sector是实际数据存储的地方。第一章中介绍了扇区的概念,在复合文档中有个特别的Mini Sector,其大小为64字节。与第一章介绍的概念一样,多个不同的Sector可以通过索引连接起来从而拼凑起一个完整的数据区域。

2.4 FATDIFAT(分区表)

这两个东西是比较搞的一个概念。FAT其实就是第一章所说的索引表,它记录了Sector(扇区)的起始地址以及逻辑顺序。FAT实际也是存储在Sector里面,由于FAT本身也比较大,所以还有个DIFAT,其实是FAT所在的Sector的索引表,记录了FAT所在的Sector的起始地址以及逻辑关系。

复合文档格式研究之02-复合文档的主要构成_第2张图片
12  DIFATFATSector示意图

图12的示意图表示了DIFAT、FAT、Sector三者的关系,通过DIFAT的索引可以表示一个FAT分区,然后在FAT中的索引表示了Sector的记录。

2.5 Header(文件头)

文件头在文件存储的最开始,里面记录了一些基本的信息,比如文件的类型、大小、FAT(分区表)的数量、Directory(目录)的数量、起始地址、Stream标准的大小等等,还有最重要的DIFAT。

当使用程序打开文件时,最初读取的数据就是文件头,因为在文件的最开头,所以称为文件头。复合文档的文件头大小为512字节。

2.5 小结

本章介绍了复合文档中的主要组成部分,尽管比较抽象,但是结合第一章的内容就不难理解。在复合文档的最开头是文件头,除了基本信息外还记录了DIFAT,通过DIFAT可以找到FAT,通过FAT可以找到Sector,因而可以通过这些将所有的数据按照正确的逻辑顺序连接起来,然后再通过Directory的定义找到Storage和Stream,在Stream里面就可以读取真正的数据了。接下来我们就来学习如何使用VBA代码进行复合文档的解析。

 

你可能感兴趣的:(Algorithm)