È possibile impostare / modificare un file Proprietà estese con Code Pack di Windows API?
-
21-12-2019 - |
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.
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.