我想在 .NET 代码中设置文件的属性。我尝试过使用 DSOFile (v2.1),如下所示:
var properties = new OleDocumentProperties();
try
{
properties.Open(filePath);
properties.SummaryProperties.Title = "foo";
properties.Save();
}
finally
{
properties.Close();
}
它可以很好地处理 Office 文档。 (我已经使用 Word 和 Excel 进行了测试。)但是,我也想对其他类型的文档进行此操作。当我尝试使用 PDF 或 TXT 文件时,出现以下异常:
System.Runtime.InteropServices.COMException (0x800300FC):名称
无效。 (HRESULT 异常:0x800300FC (STG_E_INVALIDNAME))
在 DSOFile._OleDocumentProperties.Save()
除了设置 SummaryProperties 之外,我还设置 CustomProperties。这也适用于 Office 文件,但不适用于其他文件。我的文件系统是NTFS。
如何使用 DSOFile 或任何其他技术设置属性(标准和自定义)?
dsofile.dll
当您未安装 Office 时,可用于编辑 Office 文档属性(请参阅Q224351 http://support.microsoft.com/kb/224351/en-us。它可用于修改作为文件持久保存的 COM 结构化存储。一个可以用StgCreateStorageEx http://msdn.microsoft.com/en-us/library/aa380328%28v=vs.85%29.aspx with IID_IStorage
or IID_IPropertySetStorage
作为参数打开 COM 结构化存储文件,然后使用返回的接口处理程序IStorage http://msdn.microsoft.com/en-us/library/aa380015%28v=vs.85%29.aspx or IPropertySetStorage http://msdn.microsoft.com/en-us/library/aa379840%28v=vs.85%29.aspx.
Microsoft Office 文档的旧格式(如 .doc 或 .xls)是 COM 结构化存储文件。 Microsoft Office 文档的更高版本具有另一种基于 XML 的格式。确切地说,所有新的 Microsoft Office 文档(如 .docx 或 .xlsx)都可以在 .zip 中重命名并提取到某些 XML 文件。 Windows Installer 仍然使用 COM 结构化存储文件来表示主 .msi 文件和转换文件 (.mst)。 COM 结构化存储文件的另一个示例是用于快捷方式的 .lnk 文件。如果有人试图在一个文件中保存和修改不同信息的许多部分,而不会有文件损坏的风险,那么结构化存储文件可能会很有用。
二进制格式为结构化存储 http://msdn.microsoft.com/en-us/library/aa380369%28v=vs.85%29.aspx文件被描述here http://msdn.microsoft.com/en-us/library/dd942138.aspx.
当文件本身不是复合文件时,NTFS 对 NTFS 文件的 IPropertyStorage 和 IPropertySetStorage 接口提供一些支持(请参阅here http://msdn.microsoft.com/en-us/library/aa379974%28v=VS.85%29.aspx and here http://msdn.microsoft.com/en-us/library/aa379964%28v=VS.85%29.aspx),但我认为您无法以这种方式保存有关 PDF 或 TXT 文件的任何有用信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)