Est-il possible de définir/modifier un fichier de propriétés étendues avec les API Windows Pack de Code?

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

Question

Je voudrais savoir si il est possible de définir/modifier un fichier de propriétés étendues (Explorer:Clic-droit > Propriétés > Détails) à l'aide de l'API Windows Pack de Code.

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

J'utilise ces quelques lignes pour obtenir les propriétés de la je veux, mais je ne sais pas comment faire pour modifier l'un d'eux (le nom de l'artiste par exemple).Je sais que je peux utiliser taglib-forte, mais je vais l'utiliser que si il n'y a pas de solution sans un code externe.

Merci à vous tous pour avoir pris le temps de m'aider.

Était-ce utile?

La solution

J'ai trouvé un moyen de modifier certaines propriétés avec ShellPropertyWriter mais certaines propriétés sont en lecture seule.

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

Dans cet exemple, les 2 premières occurences de ShellPropertyWriter.WriteProperty() va faire exactement la même, de modifier les "artistes" de la de fichiers (Explorer:Clic-droit > Propriétés > Détails).Le troisième appel va lancer un "Accès refusé" l'exception".Certains sont modifiables, d'autres ne le sont pas.Il faut juste essayer.

Autres conseils

Vous pouvez écrire directement sur ShellFile en définissant la valeur des propriétés sans 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";

Soyez juste au courant, cela pour pouvoir modifier des champs spécifiques au codec d'un fichier, il est nécessaire d'installer le codec sur l'ordinateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top