Oto rozwiązanie do czytania - a nie pisania - rozszerzonych właściwości na podstawie tego, co znalazłem na tej stronie i przy pomocy obiektów shell32 .
Żeby było jasne, to jest hack. Wygląda na to, że ten kod będzie nadal działał w systemie Windows 10, ale trafi na niektóre puste właściwości. Poprzednia wersja systemu Windows powinna używać:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
W systemie Windows 10 zakładamy, że jest około 320 właściwości do odczytania i po prostu pomijamy puste wpisy:
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;
}
Jak wspomniano, musisz odwołać się do zestawu Com Interop.Shell32.
Jeśli otrzymasz wyjątek związany z STA, rozwiązanie znajdziesz tutaj:
Wyjątek w przypadku używania Shell32 do uzyskania rozszerzonych właściwości pliku
Nie mam pojęcia, jakie nazwy właściwości wyglądałyby w obcym systemie i nie mogłem znaleźć informacji o tym, które stałe lokalizowalne użyć, aby uzyskać dostęp do słownika. Odkryłem również, że nie wszystkie właściwości z okna dialogowego Właściwości były obecne w zwróconym słowniku.
BTW jest to strasznie powolne i - przynajmniej w Windows 10 - analizowanie dat w pobranym ciągu byłoby wyzwaniem, więc używanie tego wydaje się być złym pomysłem na początek.
W systemie Windows 10 zdecydowanie powinieneś użyć biblioteki Windows.Storage, która zawiera SystemPhotoProperties, SystemMusicProperties itp.
Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
I wreszcie, pisał o wiele lepsze rozwiązanie, które używa WindowsAPICodePack tam