Вот решение для чтения, а не записи расширенных свойств, основанное на том, что я нашел на этой странице и в справке по объектам shell32 .
Чтобы было понятно, это взлом. Похоже, этот код по-прежнему будет работать в Windows 10, но затронет некоторые пустые свойства. Предыдущая версия Windows должна использовать:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
В Windows 10 мы предполагаем, что есть около 320 свойств для чтения, и просто пропускаем пустые записи:
private Dictionary<string, string> GetExtendedProperties(string filePath)
{
var directory = Path.GetDirectoryName(filePath);
var shell = new Shell32.Shell();
var shellFolder = shell.NameSpace(directory);
var fileName = Path.GetFileName(filePath);
var folderitem = shellFolder.ParseName(fileName);
var dictionary = new Dictionary<string, string>();
var i = -1;
while (++i < 320)
{
var header = shellFolder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header)) continue;
var value = shellFolder.GetDetailsOf(folderitem, i);
if (!dictionary.ContainsKey(header)) dictionary.Add(header, value);
Console.WriteLine(header +": " + value);
}
Marshal.ReleaseComObject(shell);
Marshal.ReleaseComObject(shellFolder);
return dictionary;
}
Как уже упоминалось, вам необходимо сослаться на сборку Com Interop.Shell32.
Если вы получите исключение, связанное с STA, вы найдете решение здесь:
Исключение при использовании Shell32 для получения расширенных свойств файла
Я понятия не имею, какими будут имена этих свойств в чужой системе, и не мог найти информацию о том, какие локализуемые константы использовать для доступа к словарю. Я также обнаружил, что не все свойства из диалогового окна «Свойства» присутствуют в возвращенном словаре.
Кстати, это ужасно медленно, и - по крайней мере, в Windows 10 - анализ дат в извлеченной строке был бы проблемой, поэтому использование этого кажется плохой идеей для начала.
В Windows 10 вам обязательно нужно использовать библиотеку Windows.Storage, которая содержит SystemPhotoProperties, SystemMusicProperties и т. Д.
Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
И , наконец, я отправил гораздо лучшее решение , которое использует WindowsAPICodePack там