【问题标题】:Set Windows File Properties Of Non Office Files设置非 Office 文件的 Windows 文件属性
【发布时间】:2011-10-17 13:07:05
【问题描述】:

我想在 .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 或任何其他技术设置属性(标准和自定义)?

【问题讨论】:

    标签: .net windows file metadata


    【解决方案1】:

    dsofile.dll 可用于在未安装 Office 时编辑 Office 文档属性(请参阅Q224351。它可用于将 COM 结构化存储持久化为文件。可以将 StgCreateStorageEx 与 IID_IStorage 一起使用或IID_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 文件。如果有人试图在一个文件中保存和修改不同信息的许多部分而不会有损坏文件的风险,结构化存储文件会很有用。

    Structured Storage文件的二进制格式描述为here。

    当文件本身不是复合文件时,NTFS 对 NTFS 文件的 IPropertyStorage 和 IPropertySetStorage 接口有一些支持(请参阅here 和here),但我认为您无法以这种方式保存有关 PDF 或 TXT 文件的任何有用信息。

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2013-08-19
      相关资源
      最近更新 更多