Получение расширенных свойств файла в C# .net
Я нашел этот пост:
Чтение / запись расширенных свойств файла (C#)
Это объясняет, как получить расширенные свойства файла в.net. Но это указывает на статью Code Project, которой 10 лет.
Самой нити 5 лет.
Есть ли лучший способ получить расширенные свойства файла, такие как Title, SubTitle, Episode Name и т. Д.?
Что я действительно хотел бы сделать, так это получить расширенную информацию о файлах для отдельных файлов. Мне кажется, что этот код перебирает каталог и получает информацию об этих файлах.
2 ответа
Я уже использовал Windows API Code Pack
ShellObject picture = ShellObject.FromParsingName(file);
var camera = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraModel);
newItem.CameraModel = GetValue(camera, String.Empty, String.Empty);
var company = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraManufacturer);
newItem.CameraMaker = GetValue(company, String.Empty, String.Empty);
Вы можете использовать мою библиотеку MetadataExtractor для доступа ко всем видам метаданных из файлов изображений и видео. Он поддерживает Exif, IPTC и многие другие виды метаданных.
Чтобы запустить этот код, вам нужно будет добавить два пакета-слепка - мне пришлось добавить старую версию из консоли диспетчера пакетов, поскольку последняя версия не устанавливалась на моем допотопном VS 2012:
Install-Package WindowsAPICodePack-Core -Version 1.1.2
Install-Package WindowsAPICodePack-Shell -Version 1.1.1
Ниже приведен код для перечисления всех свойств:
using Microsoft.WindowsAPICodePack.Shell;
private void ListExtendedProperties(string filePath)
{
var file = ShellObject.FromParsingName(filePath);
var i = 0;
foreach (var property in file.Properties.DefaultPropertyCollection)
{
var name = (property.CanonicalName ?? "unnamed-[" + i + "]").Replace("System.", string.Empty);
var t = Nullable.GetUnderlyingType(property.ValueType) ?? property.ValueType;
var value = (null == property.ValueAsObject)
? string.Empty
: (Convert.ChangeType(property.ValueAsObject, t)).ToString();
var friendlyName = property.Description.DisplayName;
Console.WriteLine(i++ + " " + name + "/" + friendlyName + ": " + value);
}
}