创建类似MS Office文档的文件格式以暴露文档属性
我们应用程序的“文档”是单个二进制文件。
我们的客户希望我们能给这些文档文件添加类似于微软Office的文档属性,这样用户管理起来会更方便。这里的“更方便”是指,Windows资源管理器能够在提示框中显示常见的文档属性。
我研究了一下,发现我们应该考虑使用OLE结构化存储作为我们数据文件的基础。我看到这种技术也被称为MS结构化存储、OLE 2复合文档格式和Windows文件元数据。
我对使用OLE结构化存储的担忧是,Office 2007或2010似乎不再使用这种文件格式,而且OLE结构化存储需要注册一个DSOFILE.DLL的ActiveX组件,而我们的许多客户在使用我们的软件时,都是在限制权限的工作站上运行,用户没有管理员权限来安装软件。(我们的应用程序是纯XCOPY部署的)。
希望能听到大家对我们有哪些选择的想法。
1 个回答
我觉得你最好的选择是使用OLE复合文档。
虽然微软可能已经不再使用这个格式了,但那是因为他们转向了XML文件格式。除非你愿意把现在的文件格式转换成XML,否则我觉得新的标签标准对你来说可能没什么吸引力。
你可以让你的应用程序保存两个文件,一个是XML格式的专门用来存标签,另一个是二进制数据文件,但这样会给用户带来麻烦。OLE复合文档格式的主要目的就是把多个“文件”合在一个文件里。
而且,我会很惊讶如果现代Windows没有内置支持OLE复合文档。我记得早在十多年前的Microsoft Word 6.0,文档就已经是以这种OLE复合文档格式保存的了。为什么Windows XP或更新版本还需要额外的.DLL文件来解析标签呢?
使用OLE复合文档格式的最大好处是,用户的标签会跟着文件走,无论用户是把文件写到文件服务器上,还是把文件放到邮件里,或者把文件刻录到CD上,标签都会保留。(我之前写的第一个答案我删掉了,虽然如果它有效也会把用户标签放在文件外面,但我越想越觉得这样不太好。)
所以,我建议你尝试创建一个OLE复合文档,然后在Windows XP的资源管理器中查看这个文件。看看你能否在不下载和安装ActiveX .DLL的情况下看到标签。我觉得应该可以。(不过我现在不太用Windows,所以不能方便地为你测试这个。)
编辑:好吧,我刚刚做了一个测试。我在工作中有一台Windows电脑。我用Word 2007创建了一个文档,并将其保存为Word 97格式。我在Windows资源管理器中查看了文档属性;作者名字在标签中是可见的。我在“评论”中添加了文本,然后在Word 2007中打开了文件。然后我能查看评论(点击左上角的“办公”图标,选择“准备”,再选择“属性”)。
所以,我的理论有了一些证据支持:我不需要安装任何特殊软件,我的Windows资源管理器就能处理带标签的OLE复合文档格式的Word文件。(可能是Microsoft Office安装了一些特殊的.DLL来让Windows资源管理器使用标签;我在那台电脑上确实安装了Microsoft Office 2007。但你的客户可能也有Microsoft Office,所以即使是这样,我仍然认为这是最好的解决方案。)
我建议你在谷歌上搜索“OLE复合文档格式”,看看如何编写这种格式。我在这里找到了一个关于如何读取标签的例子:http://support.microsoft.com/kb/186898