Ich versuche herauszufinden, wie man die erweiterten Dateieigenschaften in C# lesen/schreiben kann z. B. Kommentar, Bitrate, Zugriffsdatum, Kategorie usw., die Sie im Windows-Explorer sehen können. Irgendwelche Ideen, wie man das macht? EDIT: Ich werde hauptsächlich Videodateien lesen/schreiben (AVI/DIVX/...)
Antworten
Zu viele Anzeigen?Für diejenigen, die nicht verrückt nach VB sind, hier ist es in c#:
Beachten Sie, dass Sie einen Verweis hinzufügen müssen auf Microsoft Shell-Steuerungen und Automatisierung auf der Registerkarte COM des Dialogfelds Referenzen.
public static void Main(string[] args)
{
List<string> arrHeaders = new List<string>();
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder objFolder;
objFolder = shell.NameSpace(@"C:\temp\testprop");
for( int i = 0; i < short.MaxValue; i++ )
{
string header = objFolder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header))
break;
arrHeaders.Add(header);
}
foreach(Shell32.FolderItem2 item in objFolder.Items())
{
for (int i = 0; i < arrHeaders.Count; i++)
{
Console.WriteLine(
$"{i}\t{arrHeaders[i]}: {objFolder.GetDetailsOf(item, i)}");
}
}
}
Lösung 2016
Fügen Sie die folgenden NuGet-Pakete zu Ihrem Projekt hinzu:
Microsoft.WindowsAPICodePack-Shell
von MicrosoftMicrosoft.WindowsAPICodePack-Core
von Microsoft
Lesen und Schreiben von Eigenschaften
using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
string filePath = @"C:\temp\example.docx";
var file = ShellFile.FromFilePath(filePath);
// Read and Write:
string[] oldAuthors = file.Properties.System.Author.Value;
string oldTitle = file.Properties.System.Title.Value;
file.Properties.System.Author.Value = new string[] { "Author #1", "Author #2" };
file.Properties.System.Title.Value = "Example Title";
// Alternate way to Write:
ShellPropertyWriter propertyWriter = file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Author, new string[] { "Author" });
propertyWriter.Close();
Das ist wichtig:
Es muss sich um eine gültige Datei handeln, die mit der zugewiesenen Software erstellt wurde. Jeder Dateityp hat spezifische erweiterte Dateieigenschaften und nicht alle sind beschreibbar.
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.
Ejemplo:
- Erstellen Sie eine txt-Datei auf dem Desktop und benennen Sie ihre Erweiterung in docx um. Sie können nicht bearbeiten
Author
oTitle
Eigentum. - Mit Word öffnen, bearbeiten und speichern es. Jetzt können Sie.
Stellen Sie also sicher, dass Sie einige try
catch
Weiteres Thema: Microsoft Docs: Implementieren von Property Handlern
Es gibt ein CodeProject-Artikel für einen ID3-Leser. Und ein Thema bei kixtart.org die weitere Informationen für andere Eigenschaften enthält. Im Grunde müssen Sie die GetDetailsOf()
Methode en el Ordner Shell-Objekt für shell32.dll
.
Dieses Beispiel in VB.NET liest alle erweiterten Eigenschaften:
Sub Main()
Dim arrHeaders(35)
Dim shell As New Shell32.Shell
Dim objFolder As Shell32.Folder
objFolder = shell.NameSpace("C:\tmp")
For i = 0 To 34
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Next
For Each strFileName In objfolder.Items
For i = 0 To 34
Console.WriteLine(i & vbTab & arrHeaders(i) & ": " & objfolder.GetDetailsOf(strFileName, i))
Next
Next
End Sub
Sie müssen einen Verweis hinzufügen auf Microsoft Shell-Steuerungen und Automatisierung von der COM der Registerkarte Referenzen Dialog.
Ich danke euch für diesen Thread! Er hat mir geholfen, als ich die Dateiversion einer Exe herausfinden wollte. Allerdings musste ich das letzte Stückchen von dem, was Extended Properties genannt wird, selbst 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 für dieses Problem ist der Eigenschaftsindexer FolderItem.ExtendedProperty und wenn Sie alle Leerzeichen im Namen der Eigenschaft weglassen, erhalten Sie den Wert. So wird z. B. aus "File Version" "FileVersion", und das war's.
Ich hoffe, das hilft noch jemandem, ich dachte nur, ich füge diese Information zu diesem Thema hinzu. Prost!
- See previous answers
- Weitere Antworten anzeigen