设置非Office文件的Windows文件属性

我想在.NET代码中设置文件的属性。 我已经尝试使用DSOFile(v2.1)像这样:

var properties = new OleDocumentProperties(); try { properties.Open(filePath); properties.SummaryProperties.Title = "foo"; properties.Save(); } finally { properties.Close(); } 

它与Office文档工作正常。 (我已经用Word和Exceltesting过了)。但是,我也想用其他types的文档来做。 当我尝试使用PDF或TXT文件时,出现以下exception:

System.Runtime.InteropServices.COMException(0x800300FC):名称无效。 (从HRESULTexception:0x800300FC(STG_E_INVALIDNAME))在DSOFile._OleDocumentProperties.Save()

除了设置SummaryProperties之外,我还设置了CustomProperties。 这也适用于Office文件,但不是其他人。 我的文件系统是NTFS。

如何使用DSOFile或使用其他技术来设置属性(标准和自定义)?

可以使用dsofile.dll在没有安装Office的情况下编辑Office文档属性(请参阅Q224351 。可以使用它来修改COM结构化存储持久化文件,可以使用StgCreateStorageEx和IID_IStorageIID_IPropertySetStorage作为参数打开COM结构化存储文件,然后使用返回的接口处理程序IStorage或IPropertySetStorage 。

旧格式的Microsoft Office文档(如.doc或.xls)是COM结构化存储文件。 更高版本的Microsoft Office文档具有另一种基于XML的格式。 要将所有新的Microsoft Office文档(如.docx或.xlsx)以.zip格式重命名并提取到某些XML文件。 Windows Installer仍然使用COM结构化存储文件来表示主.msi文件和转换文件(.mst)。 COM结构化存储文件的另一个例子是用于快捷方式的.lnk文件。 结构化存储文件可以是有用的情况下,如果试图保存和修改一个文件中的不同信息的许多部分没有风险损坏的文件。

这里描述了结构化存储文件的二进制格式。

当文件本身不是复合文件时,NTFS有一些支持IPropertyStorage和IPropertySetStorage接口的NTFS文件(参见这里和这里 ),但是我不认为你将能够保存任何关于PDF或TXT的有用信息文件。