Можно ли установить / отредактировать расширенные свойства файла с помощью Windows API Code Pack?
-
21-12-2019 - |
Вопрос
Я хотел бы знать, возможно ли установить/ отредактировать расширенные свойства файла (проводник:Щелкните правой кнопкой мыши > Свойства > Сведения) с помощью пакета кода Windows API.
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);
Я использую эти несколько строк, чтобы получить нужные мне свойства, но я не знаю, как отредактировать одно из них (например, имя исполнителя).Я знаю, что могу использовать taglib-sharp, но я буду использовать его только в том случае, если нет решения без внешнего кода.
Спасибо вам всем за то, что нашли время помочь мне.
Решение
Я нашел способ редактировать некоторые свойства с ShellPropertyWriter
, но некоторые свойства являются только для чтения.
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();
.
В этом образце 2 первые представления ShellPropertyWriter.WriteProperty()
будут делать то же самое, отредактируйте поле «Apphutisting Artists» файла (Explorer: Щелкните правой кнопкой мыши> Свойства> Детали).Третий звонок бросит «доступ запрещен» исключение.
Некоторые редактируемые, другие нет.Просто нужно попробовать.
Другие советы
Вы можете написать в ShellFile
непосредственно путем установки значения свойств без 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";
Просто имейте в виду, что для того, чтобы иметь возможность редактировать поля файла, зависящие от кодека, необходимо, чтобы кодек был установлен на компьютере.