本周我在应用于TIFF / TIF文件时遇到了关于Windows Shell Property System的问题。我使用Microsoft.WindowsAPICodePack 1.1.0.0来访问属性系统。
添加属性时,文件会被破坏,因为它似乎存储在预期第一个IFD指针的位置。现在,我不确定它是否只是在文件头(0x49 0x49 0x2A 0x00)之后的第5个字节插入,如果它覆盖任何现有数据。此外,在比较IDF条目标头的十六进制时,字节看起来不同。现在,当我说损坏时,只有在以编程方式将文件作为字节流打开时,才知道文件是否添加了属性系统容器。它在Windows Image Preview中打开很好,但在我的客户端用来查看TIFF文件的软件中没有。
以下是我如何添加属性(作为key = value字符串数组)。
public void SetFileTag(string fileName, string tagName, string tagValue)
{
try
{
using (var shellFile = ShellFile.FromFilePath(fileName))
{
var keywords = shellFile.Properties.System.Keywords.Value;
var keyValue = string.Concat(tagName, "=", tagValue);
var list = keywords == null ? new List<string>() : new List<string>(keywords);
if (list.Contains(keyValue))
{
return;
}
list.Add(keyValue);
using (var writer = shellFile.Properties.GetPropertyWriter())
{
writer.WriteProperty(shellFile.Properties.System.Keywords, list.ToArray(), true);
writer.Close();
}
}
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
我在代码包中查找了可用于完全删除属性的任何内容,但我找不到任何方法来执行此操作,我只能删除关键字值。任何人都会知道如何执行此操作?它不一定是.NET代码,它很可能是一个命令行工具或win32代码。