Voici une solution pour lire - et non écrire - les propriétés étendues basées sur ce que j'ai trouvé sur cette page et à l' aide des objets shell32 .
Pour être clair, c'est un hack. Il semble que ce code fonctionnera toujours sous Windows 10 mais atteindra certaines propriétés vides. La version précédente de Windows doit utiliser:
var i = 0;
while (true)
{
...
if (String.IsNullOrEmpty(header)) break;
...
i++;
Sur Windows 10, nous supposons qu'il y a environ 320 propriétés à lire et sautons simplement les entrées vides:
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;
}
Comme mentionné, vous devez référencer l'assembly Com Interop.Shell32.
Si vous obtenez une exception liée à STA, vous trouverez la solution ici:
Exception lors de l'utilisation de Shell32 pour obtenir les propriétés étendues de fichier
Je n'ai aucune idée de ce que seraient ces noms de propriétés sur un système étranger et je n'ai pas pu trouver d'informations sur les constantes localisables à utiliser pour accéder au dictionnaire. J'ai également constaté que toutes les propriétés de la boîte de dialogue Propriétés n'étaient pas présentes dans le dictionnaire renvoyé.
BTW, c'est terriblement lent et - au moins sur Windows 10 - l'analyse des dates dans la chaîne récupérée serait un défi, donc utiliser cela semble être une mauvaise idée pour commencer.
Sur Windows 10, vous devez absolument utiliser la bibliothèque Windows.Storage qui contient les SystemPhotoProperties, SystemMusicProperties etc.
https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Et enfin, j'ai publié une bien meilleure solution qui utilise WindowsAPICodePack là-bas