Ich versuche herauszufinden, wie man die erweiterten Dateieigenschaften in C # liest / schreibt, z. B. Kommentar, Bitrate, Zugriffsdatum, Kategorie usw., die Sie im Windows Explorer sehen können. Irgendwelche Ideen, wie das geht? EDIT: Ich werde hauptsächlich Videodateien lesen / schreiben (AVI / DIVX / ...)
c#
extended-properties
David Hayes
quelle
quelle
Antworten:
Für diejenigen, die nicht verrückt nach VB sind, hier ist es in c #:
Beachten Sie, dass Sie auf der Registerkarte COM des Dialogfelds Referenzen einen Verweis auf Microsoft Shell Controls and Automation hinzufügen müssen .
quelle
Es gibt einen CodeProject-Artikel für einen ID3-Reader. Und ein Thread auf kixtart.org , der weitere Informationen für andere Eigenschaften enthält. Grundsätzlich müssen Sie die
GetDetailsOf()
Methode für das Ordner- Shell-Objekt für aufrufenshell32.dll
.quelle
Lösung 2016
Fügen Sie Ihrem Projekt folgende NuGet-Pakete hinzu:
Microsoft.WindowsAPICodePack-Shell
von MicrosoftMicrosoft.WindowsAPICodePack-Core
von MicrosoftLese- und Schreibeigenschaften
Wichtig:
Die Datei muss gültig sein und von der zugewiesenen Software erstellt werden. Jeder Dateityp verfügt über bestimmte erweiterte Dateieigenschaften, von denen nicht alle beschreibbar sind.
Wenn Sie mit der rechten Maustaste auf eine Datei auf dem Desktop klicken und eine Eigenschaft nicht bearbeiten können, können Sie sie auch nicht im Code bearbeiten.
Beispiel:
Author
oderTitle
Eigenschaft nicht bearbeiten .Stellen Sie also sicher, dass Sie einige verwenden
try
catch
Weiteres Thema: MSDN: Implementieren von Property Handlern
quelle
Dieses Beispiel in VB.NET liest alle erweiterten Eigenschaften:
Sie müssen auf der Registerkarte COM des Dialogfelds Referenzen einen Verweis auf Microsoft Shell Controls and Automation hinzufügen .
quelle
Vielen Dank für diesen Thread! Es hat mir geholfen, als ich die Dateiversion einer Exe herausfinden wollte. Ich musste jedoch selbst das letzte Stück der sogenannten erweiterten Eigenschaften herausfinden.
Wenn Sie die Eigenschaften einer exe- (oder DLL-) Datei im Windows Explorer öffnen, erhalten Sie eine Registerkarte Version und eine Ansicht der erweiterten Eigenschaften dieser Datei. Ich wollte auf einen dieser Werte zugreifen.
Die Lösung hierfür ist der Eigenschaftsindexer FolderItem.ExtendedProperty. Wenn Sie alle Leerzeichen im Namen der Eigenschaft löschen, erhalten Sie den Wert. ZB geht die Dateiversion zu FileVersion, und da haben Sie es.
Hoffe, das hilft anderen, dachte nur, ich würde diese Informationen zu diesem Thread hinzufügen. Prost!
quelle
GetDetailsOf()
Methode - Ruft Details zu einem Element in einem Ordner ab. Zum Beispiel seine Größe, sein Typ oder der Zeitpunkt seiner letzten Änderung. Die Dateieigenschaften können je nachWindows-OS
Version variieren .quelle
Folder rFolder = shell.NameSpace(_rootPath);
. Zu Ihrer Information, ich verwende Windows 8.Verwenden:
Funktioniert unter Windows-Versionen wie Windows Server 2008, bei denen die Fehlermeldung "COM-Objekt vom Typ 'System .__ ComObject' kann nicht in den Schnittstellentyp 'Shell32.Shell' umgewandelt werden" angezeigt wird, wenn nur versucht wird, das Shell32-Objekt normal zu erstellen.
quelle
shell
einem derIShellDispatch
Schnittstellen (1-6) und das Mitglied direkt anrufen.Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
Jerkers Antwort ist etwas einfacher. Hier ist ein Beispielcode, der von MS aus funktioniert :
Für diejenigen, die Shell32 nicht statisch referenzieren können, können Sie es dynamisch wie folgt aufrufen:
quelle
Ich bin nicht sicher, für welche Dateitypen Sie die Eigenschaften schreiben möchten, aber taglib-scharf ist eine hervorragende Open-Source-Tagging-Bibliothek, die all diese Funktionen gut zusammenfasst. Es bietet eine Menge integrierter Unterstützung für die meisten gängigen Mediendateitypen, ermöglicht Ihnen jedoch auch das erweiterte Taggen mit nahezu jeder Datei.
BEARBEITEN: Ich habe den Link zu Taglib Sharp aktualisiert. Der alte Link funktionierte nicht mehr.
BEARBEITEN: Der Link wurde gemäß dem Kommentar von kzu noch einmal aktualisiert.
quelle
Hier ist eine Lösung zum Lesen und nicht zum Schreiben der erweiterten Eigenschaften, basierend auf dem, was ich auf dieser Seite gefunden habe, und Hilfe bei Shell32-Objekten .
Um klar zu sein, ist dies ein Hack. Es sieht so aus, als würde dieser Code unter Windows 10 weiterhin ausgeführt, trifft jedoch auf einige leere Eigenschaften. In früheren Windows-Versionen sollte Folgendes verwendet werden:
Unter Windows 10 gehen wir davon aus, dass etwa 320 Eigenschaften gelesen werden müssen, und überspringen einfach die leeren Einträge:
Wie bereits erwähnt, müssen Sie auf die Com-Assembly Interop.Shell32 verweisen.
Wenn Sie eine STA-bezogene Ausnahme erhalten, finden Sie die Lösung hier:
Ausnahme bei Verwendung von Shell32 zum Abrufen der erweiterten Dateieigenschaften
Ich habe keine Ahnung, wie diese Eigenschaftsnamen auf einem fremden System aussehen würden, und konnte keine Informationen darüber finden, welche lokalisierbaren Konstanten für den Zugriff auf das Wörterbuch verwendet werden sollen. Ich habe auch festgestellt, dass nicht alle Eigenschaften aus dem Dialogfeld "Eigenschaften" im zurückgegebenen Wörterbuch vorhanden waren.
Übrigens ist dies furchtbar langsam und - zumindest unter Windows 10 - das Parsen von Daten in der abgerufenen Zeichenfolge wäre eine Herausforderung. Daher scheint es zunächst eine schlechte Idee zu sein, dies zu verwenden.
Unter Windows 10 sollten Sie auf jeden Fall die Windows.Storage-Bibliothek verwenden, die die SystemPhotoProperties, SystemMusicProperties usw. enthält. Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
Und schließlich gab ich eine viel bessere Lösung , dass Verwendungen WindowsAPICodePack dort
quelle