Можно ли установить / отредактировать расширенные свойства файла с помощью Windows API Code Pack?

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

Вопрос

Я хотел бы знать, возможно ли установить/ отредактировать расширенные свойства файла (проводник:Щелкните правой кнопкой мыши > Свойства > Сведения) с помощью пакета кода 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";

Просто имейте в виду, что для того, чтобы иметь возможность редактировать поля файла, зависящие от кодека, необходимо, чтобы кодек был установлен на компьютере.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top