Thumbs.db的读取实现 (C#)

来源:百度文库 编辑:神马文学网 时间:2024/04/20 12:07:54
Thumbs.db的读取实现 (C#)

   Thumbs.db是Windows XP、Server 2003和Mac OS X中存储图片(JPEG, BMP, GIF, TIF)及一些文档(PDF, HTM)缩略图的缓存文件。在Windows资源管理器以缩略图形式查看文件时生成Thumbs.db,并保存在各自的目录中。默认的Thumbnail尺寸是96*96(需要修改注册表更改默认的尺寸)。
Windows Vista改变了Thumbnail的存储方式,它们被集中存储在一起,位置(Vista安装驱动器下,[User Account Name]代表当前用户名):\Users\[User Account Name]\AppData\Local\Microsoft\Windows\Explorer。
   微软并没有公开Thumbs.db的具体格式信息,从目前的调查来看,现有的读取Thumbs.db的方法都是经过测试得到的(网络上的开发者),仅仅获取了某些域的值,而不是全体。

“微软复合文档二进制结构(Compound File Binary Format)”是一种结构化的存储格式,它在一个文件里模拟磁盘存储格式,使得文件内部变得像一个磁盘,用来存放结构化信息。微软没有公开具体格式,却大量地使用,最常见的是 Offfice 的文件格式。符合微软复合文档二进制结构规范的对象叫 Storage 对象,Compound File 是一种 Storage 对象,DocFile 是一种 Compound File。虽然没公开具体规范,但幸好微软提供了访问这种格式的 API 和工具 DocFile Viewer。Thumbs.db也属于这种复合文件格式

实现读取Thumbs.db文件的API

   StgOpenStorage用来打开文件系统中一个已有的根storage对象。使用该函数可以打开复合文件,但不能用来打开目录、文件、或者summary catalogs。嵌套的storage对象只能被他们的父亲IStorage::OpenStorage 打开。不过,在Windows 2000及XP下应该使用StgOpenStorageEx

   IStorage支持创建和管理structured storage对象,Structured storage允许在一个文件内分层的存储信息,经过被认为是一个文件内的文件系统。Elements of a structured storage object are storages and streams. Storages are analogous to directories, and streams are analogous to files.

   IStream支持流对象的读写数据。Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.

相关例程及资料
ThumbDBLib(A C# library for reading thumbs.db files)
(http://www.petedavis.net/MySite/DynPageView.aspx?pageid=31)目前的代码中缺少了关闭COM对象的实现,在C#中要使用Marshal.ReleaseComObject()方法释放COM对象。

COM structured storage from .NET(http://www.vsj.co.uk/articles/display.asp?id=628)重点推荐的一篇文章

A brief description of .DB files(http://www.accessdata.com/media/en_US/print/papers/wp.Thumbs_DB_Files.en_us.pdf)