Pergunta

Gostaria de saber se é possível definir/editar as propriedades estendidas de um arquivo (Explorer:Clique com o botão direito > Propriedades > Detalhes) usando o 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);

Utilizo essas poucas linhas para obter as propriedades que desejo, mas não sei como editar uma delas (o nome do artista, por exemplo).Eu sei que posso usar taglib-sharp, mas só usarei se não houver solução sem código externo.

Obrigado a todos por dedicarem seu tempo para me ajudar.

Foi útil?

Solução

Encontrei uma maneira de editar algumas propriedades com ShellPropertyWriter mas algumas propriedades são somente leitura.

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

Nesta amostra, as 2 primeiras ocorrências de ShellPropertyWriter.WriteProperty() fará exatamente o mesmo, edite o campo "Artistas colaboradores" do arquivo (Explorer:Clique com o botão direito > Propriedades > Detalhes).A terceira chamada lançará uma exceção de "Acesso negado".Alguns são editáveis, outros não.Só preciso tentar.

Outras dicas

Você pode escrever para o ShellFile diretamente, definindo o valor das propriedades sem 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";

Esteja ciente de que para poder editar campos específicos do codec de um arquivo, é necessário ter o codec instalado no computador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top