¿Es posible configurar/editar las propiedades extendidas de un archivo con el paquete de código API de Windows?

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

Pregunta

Me gustaría saber si es posible configurar/editar las propiedades extendidas de un archivo (Explorador:Haga clic derecho > Propiedades > Detalles) usando el paquete de código API de 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);

Utilizo estas pocas líneas para obtener las propiedades que quiero, pero no sé cómo editar una de ellas (el nombre del artista, por ejemplo).Sé que puedo usar taglib-sharp, pero lo usaré sólo si no hay una solución sin código externo.

Gracias a todos por tomarse el tiempo para ayudarme.

¿Fue útil?

Solución

Encontré una forma de editar algunas propiedades con ShellPropertyWriter, pero algunas propiedades son de solo lectura.

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

En esta muestra, las 2 primeras ocurrencias de ShellPropertyWriter.WriteProperty() hará exactamente lo mismo, editar el campo "artistas contribuyentes" del archivo (Explorador: clic derecho> Propiedades> Detalles).La tercera llamada lanzará una excepción de "acceso denegado". Algunos son editables, otros no lo son.Solo necesito probar.

Otros consejos

Puedes escribir al ShellFile directamente estableciendo el valor de las propiedades sin 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";

Solo tenga en cuenta que para poder editar campos de un archivo específicos del códec, es necesario tener el códec instalado en la computadora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top