Aquí hay una solución para leer, no escribir, las propiedades extendidas basadas en lo que encontré en esta página y en ayuda con los objetos shell32 .
Para ser claros, esto es un truco. Parece que este código aún se ejecutará en Windows 10, pero afectará algunas propiedades vacías. La versión anterior de Windows debería usar:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
En Windows 10 asumimos que hay alrededor de 320 propiedades para leer y simplemente omitimos las entradas vacías:
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;
}
Como se mencionó, debe hacer referencia al ensamblado Com Interop.Shell32.
Si obtiene una excepción relacionada con STA, encontrará la solución aquí:
Excepción al usar Shell32 para obtener propiedades extendidas del archivo
No tengo idea de cómo serían esos nombres de propiedades en un sistema externo y no pude encontrar información sobre qué constantes localizables usar para acceder al diccionario. También encontré que no todas las propiedades del cuadro de diálogo Propiedades estaban presentes en el diccionario devuelto.
Por cierto, esto es terriblemente lento y, al menos en Windows 10, analizar las fechas en la cadena recuperada sería un desafío, por lo que usar esto parece ser una mala idea para empezar.
En Windows 10 definitivamente debería usar la biblioteca Windows.Storage que contiene SystemPhotoProperties, SystemMusicProperties, etc.
https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Y finalmente, publiqué una solución mucho mejor que usa WindowsAPICodePack allí