Domanda

Mi piacerebbe sapere se è possibile impostare / modificare un file Proprietà estese (Explorer: fare clic con il pulsante destro del mouse> Proprietà> Dettagli) utilizzando il codice API di Windows.

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

Io uso queste poche righe per ottenere le proprietà che voglio, ma non so come modificare uno di loro (il nome dell'artista ad esempio). So che posso usare taglib-nitido, ma lo userò solo se non c'è soluzione senza codice esterno.

Grazie Tutto per aver preso il tempo per aiutarmi.

È stato utile?

Soluzione

Ho trovato un modo per modificare alcune proprietà con ShellPropertyWriter ma alcune proprietà sono solo lettura.

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 questo esempio, i 2 primi crediti di ShellPropertyWriter.WriteProperty() faranno esattamente lo stesso, modifica il campo "ARTISTI" del contributo "del file (Explorer: fare clic con il tasto destro> Proprietà> Dettagli).La terza chiamata lancerà un'eccezione "Accesso negato". Alcuni sono modificabili, altri no.Devi solo provare.

Altri suggerimenti

È possibile scrivere direttamente al ShellFile direttamente impostando il valore delle proprietà senza 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";
.

Basta essere consapevole, che per essere in grado di modificare i campi specifici del codec di un file, è necessario avere il codec installato sul computer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top