一尘不染

如何设置扩展文件属性?

c#

我需要为某些Word / PDF文档设置“公司”字段值。我说的是您在“文件属性”下看到的扩展文件属性(摘要/作者/标题等)。

我知道如何 获取 它们(通过使用shell32.dll类库)。我以为我也可以使用相同的类库 设置
它们,但似乎编写扩展属性要困难一些,shell32.dll并且不允许这样做。

我发现了有关的内容taglib-sharp,该内容似乎可以设置扩展属性,但是我不太了解它是如何工作的。


阅读 614

收藏
2020-05-19

共1个答案

一尘不染

解决方案2016

将以下NuGet软件包添加到您的项目中:

  • Microsoft.WindowsAPICodePack-Shell 由Microsoft
  • Microsoft.WindowsAPICodePack-Core 由Microsoft

读写属性

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

string filePath = @"C:\temp\example.docx";
var file = ShellFile.FromFilePath(filePath);

// Read and Write:

string[] oldAuthors = file.Properties.System.Author.Value;
string oldTitle = file.Properties.System.Title.Value;

file.Properties.System.Author.Value = new string[] { "Author #1", "Author #2" };
file.Properties.System.Title.Value = "Example Title";

// Alternate way to Write:

ShellPropertyWriter propertyWriter =  file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Author, new string[] { "Author" });
propertyWriter.Close();

重要:

该文件必须是有效的,由特定的分配软件创建。每种文件类型都有特定的扩展文件属性,但并非所有文件都是可写的。

如果右键单击桌面上的文件而无法编辑属性,则也将无法在代码中对其进行编辑。

例:

  • 在桌面上创建txt文件,将其扩展名重命名为docx。您无法编辑其AuthorTitle属性。
  • 用Word打开它,编辑并保存。现在你可以。

因此,请确保使用一些 try catch

进一步的主题: MSDN:实现属性处理程序

2020-05-19