113 Stimmen

Lesen/Schreiben von "erweiterten" Dateieigenschaften (C#)

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/...)

90voto

csharptest.net Punkte 58070

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)}");
        }
    }
}

34voto

Martin Schneider Punkte 12384

Lösung 2016

Fügen Sie die folgenden NuGet-Pakete zu Ihrem Projekt hinzu:

  • Microsoft.WindowsAPICodePack-Shell von Microsoft
  • Microsoft.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 o Title 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

27voto

Mark Cidade Punkte 95914

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 .

26voto

Dirk Vollmar Punkte 166522

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.

8voto

JERKER Punkte 847

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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X