Получение определенных атрибутов файла - PullRequest
8 голосов
/ 04 июня 2011

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

Изображение: ширина, высота, дата съемки, используемая программа

Аудио: время исполнения, исполнитель, альбом, жанр, битрейт, год публикации

Видео: время выполнения, ширина, высота, кадры / с, битрейт видео, битрейт аудио

Очевидно, что Windows может довольно легко получить и отобразить эти атрибуты, но как мне это сделать в C #?

Ответы [ 2 ]

7 голосов
/ 04 июня 2011

Любезность этой темы.

Я проверил, что это получает все атрибуты файла, включая расширенные атрибуты.

В вашем проекте перейдите к «Добавить ссылку» -> COM -> 'Microsoft Shell Controls and Automation'

Добавьте, и снова любезно к указанному потоку, метод C # для чтения атрибутов файлов в каталоге.(Я все еще исследую, чтобы увидеть, возможно ли выполнить эту функцию для определенного файла. Если нет, вы всегда можете передать соответствующее имя файла и убедиться, что только атрибуты этого файла.)

public static void Main(string[] args)
{
    List<string> arrHeaders = new List<string>();

    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder objFolder;

    objFolder = shell.NameSpace(@"C:\temp\testprop");

    for( int i = 0; i < short.MaxValue; i++ )
    {
        string header = objFolder.GetDetailsOf(null, i);
        if (String.IsNullOrEmpty(header))
            break;
        arrHeaders.Add(header);
    }

    foreach(Shell32.FolderItem2 item in objFolder.Items())
    {
        for (int i = 0; i < arrHeaders.Count; i++)
        {
            Console.WriteLine("{0}\t{1}: {2}", i, arrHeaders[i], objFolder.GetDetailsOf(item, i));
        }
    }
}
2 голосов
/ 04 июня 2011

Самый простой способ получить доступ к этой информации - позволить оболочке (Explorer) сделать это за вас и просто запросить (через Windows Property System ) ее. И самый простой способ сделать это из C # - это использовать Windows API Code Pack для .NET .

В частности, вы хотите получить доступ к магазину недвижимости. Для получения справочной информации обратитесь к папке Samples в проекте PropertiesEditDemo.

Вы можете сделать это самостоятельно, прочитав все метаданные файла, но проблема в том, что ваша программа должна знать все доступные метаданные для всех доступных типов файлов. Я обычно предпочитаю висеть на Шелле за это знание.

...