J'essaie de savoir comment lire / écrire dans les propriétés de fichier étendues dans C #, par exemple, commentaire, débit binaire, date d'accès, catégorie, etc. que vous pouvez voir dans l'explorateur Windows. Des idees pour faire cela? EDIT: Je vais principalement lire / écrire sur des fichiers vidéo (AVI / DIVX / ...)
c#
extended-properties
David Hayes
la source
la source
Réponses:
Pour ceux qui ne sont pas fous de VB, le voici en c #:
Notez que vous devez ajouter une référence à Microsoft Shell Controls and Automation à partir de l'onglet COM de la boîte de dialogue Références.
la source
Il existe un article CodeProject pour un lecteur ID3. Et un fil de discussion sur kixtart.org qui contient plus d'informations sur d'autres propriétés. Fondamentalement, vous devez appeler la
GetDetailsOf()
méthode sur l' objet shell de dossier pourshell32.dll
.la source
Solution 2016
Ajoutez les packages NuGet suivants à votre projet:
Microsoft.WindowsAPICodePack-Shell
par MicrosoftMicrosoft.WindowsAPICodePack-Core
par MicrosoftLire et écrire des propriétés
Important:
Le fichier doit être valide, créé par le logiciel spécifique attribué. Chaque type de fichier a des propriétés de fichier étendues spécifiques et toutes ne sont pas accessibles en écriture.
Si vous cliquez avec le bouton droit sur un fichier sur le bureau et que vous ne pouvez pas modifier une propriété, vous ne pourrez pas non plus le modifier dans le code.
Exemple:
Author
ouTitle
.Assurez-vous donc d'en utiliser
try
catch
Sujet supplémentaire: MSDN: implémentation de gestionnaires de propriétés
la source
Cet exemple dans VB.NET lit toutes les propriétés étendues:
Vous devez ajouter une référence à Microsoft Shell Controls and Automation à partir de l' onglet COM de la boîte de dialogue Références .
la source
Merci les gars pour ce fil! Cela m'a aidé lorsque je voulais comprendre la version de fichier d'un exe. Cependant, j'avais besoin de comprendre moi-même la dernière partie de ce qu'on appelle les propriétés étendues.
Si vous ouvrez les propriétés d'un fichier exe (ou dll) dans l'Explorateur Windows, vous obtenez un onglet Version et une vue des propriétés étendues de ce fichier. Je voulais accéder à l'une de ces valeurs.
La solution à cela est l'indexeur de propriété FolderItem.ExtendedProperty et si vous supprimez tous les espaces dans le nom de la propriété, vous obtiendrez la valeur. Par exemple, File Version va FileVersion, et là vous l'avez.
J'espère que cela aide quelqu'un d'autre, j'ai juste pensé ajouter cette information à ce fil. À votre santé!
la source
GetDetailsOf()
Méthode - Récupère les détails d'un élément dans un dossier. Par exemple, sa taille, son type ou l'heure de sa dernière modification. Les propriétés du fichier peuvent varier en fonction de laWindows-OS
version.la source
Folder rFolder = shell.NameSpace(_rootPath);
. Pour info, j'utilise le système d'exploitation Windows 8.Utilisation:
Fonctionnera sur les versions de Windows comme Windows Server 2008 où vous obtiendrez l'erreur "Impossible de convertir l'objet COM de type 'System .__ ComObject' en type d'interface 'Shell32.Shell'" si vous essayez simplement de créer l'objet Shell32 normalement.
la source
shell
vers l'une desIShellDispatch
interfaces (1-6) et appeler le membre directement.Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
La réponse de Jerker est un peu plus simple. Voici un exemple de code qui fonctionne à partir de MS :
Pour ceux qui ne peuvent pas référencer shell32 de manière statique, vous pouvez l'invoquer dynamiquement comme ceci:
la source
Je ne suis pas sûr des types de fichiers pour lesquels vous essayez d'écrire les propriétés, mais taglib-sharp est une excellente bibliothèque de balisage open source qui englobe bien toutes ces fonctionnalités. Il a beaucoup de support intégré pour la plupart des types de fichiers multimédias populaires, mais vous permet également de faire un marquage plus avancé avec à peu près n'importe quel fichier.
EDIT: J'ai mis à jour le lien vers taglib sharp. L'ancien lien ne fonctionnait plus.
EDIT: Mise à jour du lien une fois de plus par commentaire de kzu.
la source
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:
Sur Windows 10, nous supposons qu'il y a environ 320 propriétés à lire et sautons simplement les entrées vides:
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
la source