删除ShellFile属性

时间:2016-01-20 13:54:08

标签: c# tiff windows-api-code-pack

本周我在应用于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代码。

0 个答案:

没有答案