Ось рішення для читання - не написання - розширених властивостей на основі того, що я знайшов на цій сторінці та на допомогу з об'єктами 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