2

本周我在应用于 TIFF/TIF 文件时遇到了一个关于 Windows Shell 属性系统的问题。我正在使用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 代码。

4

0 回答 0