Получение расширенных свойств файла в 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 и многие другие виды метаданных.

Он доступен на GitHub и NuGet.

Чтобы запустить этот код, вам нужно будет добавить два пакета-слепка - мне пришлось добавить старую версию из консоли диспетчера пакетов, поскольку последняя версия не устанавливалась на моем допотопном 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);
        }
    }
Другие вопросы по тегам