Ecco una soluzione per leggere - non scrivere - le proprietà estese in base a ciò che ho trovato in questa pagina e in aiuto con gli oggetti shell32 .
Per essere chiari questo è un trucco. Sembra che questo codice funzionerà ancora su Windows 10 ma colpirà alcune proprietà vuote. La versione precedente di Windows dovrebbe utilizzare:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
Su Windows 10 presumiamo che ci siano circa 320 proprietà da leggere e saltiamo semplicemente le voci vuote:
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;
}
Come accennato, è necessario fare riferimento all'assembly Com Interop.Shell32.
Se ricevi un'eccezione relativa a STA, troverai la soluzione qui:
Eccezione quando si utilizza Shell32 per ottenere le proprietà estese del file
Non ho idea di come sarebbero i nomi di queste proprietà su un sistema esterno e non sono riuscito a trovare informazioni su quali costanti localizzabili utilizzare per accedere al dizionario. Ho anche scoperto che non tutte le proprietà della finestra di dialogo Proprietà erano presenti nel dizionario restituito.
A proposito, questo è terribilmente lento e, almeno su Windows 10, l'analisi delle date nella stringa recuperata sarebbe una sfida, quindi l'utilizzo di questo sembra essere una cattiva idea con cui iniziare.
Su Windows 10 dovresti assolutamente usare la libreria Windows.Storage che contiene SystemPhotoProperties, SystemMusicProperties ecc.
Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
E infine, ho pubblicato una soluzione molto migliore che utilizza WindowsAPICodePack lì