Ist es möglich, die erweiterten Eigenschaften einer Datei mit dem Windows API Code Pack festzulegen/zu bearbeiten?

StackOverflow https://stackoverflow.com//questions/24040248

Frage

Ich würde gerne wissen, ob es möglich ist, die erweiterten Eigenschaften einer Datei festzulegen/zu bearbeiten (Explorer:Klicken Sie mit der rechten Maustaste auf > Eigenschaften > Details) und verwenden Sie dabei das Windows API Code Pack.

var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellObject.FromParsingName(filePath);
var artistName = shellFile.Properties.GetProperty(SystemProperties.System.Music.DisplayArtist).ValueAsObject.ToString();
var duration = TimeSpan.FromMilliseconds(Convert.ToDouble(shellFile.Properties.GetProperty(SystemProperties.System.Media.Duration).ValueAsObject) * 0.0001);

Ich verwende diese wenigen Zeilen, um die gewünschten Eigenschaften zu erhalten, weiß aber nicht, wie ich eine davon bearbeiten soll (z. B. den Namen des Künstlers).Ich weiß, dass ich taglib-sharp verwenden kann, aber ich werde es nur verwenden, wenn es keine Lösung ohne externen Code gibt.

Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen.

War es hilfreich?

Lösung

Ich habe eine Möglichkeit gefunden, einige Eigenschaften mit zu bearbeiten ShellPropertyWriter aber einige Eigenschaften sind schreibgeschützt.

var shellFile = ShellFile.FromParsingName(filePath);
ShellPropertyWriter w = shellFile.Properties.GetPropertyWriter();
try
{
    w.WriteProperty(SystemProperties.System.Author, new string[] { "MyTest", "Test" });
    w.WriteProperty(SystemProperties.System.Music.Artist, new string[] { "MyTest", "Test" });
    w.WriteProperty(SystemProperties.System.Music.DisplayArtist, "Test");
}
catch (Exception ex)
{

}
w.Close();

In diesem Beispiel sind die beiden ersten Vorkommen von ShellPropertyWriter.WriteProperty() Wenn Sie genau das Gleiche tun, bearbeiten Sie das Feld „Mitwirkende Künstler“ der Datei (Explorer:Rechtsklick > Eigenschaften > Details).Der dritte Aufruf löst die Ausnahme „Zugriff verweigert“ aus.Einige können bearbeitet werden, andere nicht.Muss es einfach versuchen.

Andere Tipps

Sie können an die schreiben ShellFile direkt durch Festlegen des Wertes der Eigenschaften ohne ShellPropertyWriter:

var shellFile = ShellFile.FromFilePath(filePath);

shellFile.Properties.System.Author.Value = new string[] { "MyTest", "Test" };
shellFile.Properties.System.Music.Artist.Value = new string[] { "MyTest", "Test" };
shellFile.Properties.System.Music.DisplayArtist.Value = "Test";

Beachten Sie jedoch, dass der Codec auf dem Computer installiert sein muss, um Codec-spezifische Felder einer Datei bearbeiten zu können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top