Est-il possible de définir/modifier un fichier de propriétés étendues avec les API Windows Pack de Code?
-
21-12-2019 - |
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.
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.