2013-02-27 2 views
0

Если вы щелкните правой кнопкой мыши файл в проводнике Windows и выберите «Свойства», появится диалоговое окно с тонной информацией. Как я могу получить доступ к этой информации с помощью C#?Как я могу получить информацию со вкладки сведений о диалоговом окне свойств файла в Windows?

В частности, я ищу информацию на вкладке «Сведения». Я работаю в основном с изображениями, поэтому важно «Дата взятия». Я также буду работать с другими файлами, поэтому было бы неплохо иметь способ получить любые метаданные, связанные с файлом.

Я видел, как упоминалось использование Shell32.dll, чтобы получить эту информацию, но я получаю ошибки при попытке ссылаться на эту библиотеку. Есть ли другой способ сделать это, может быть, через P/Invoke?

+0

Изображение не совпадает с обычным файлом. Попробуйте загрузить изображение в объект Image и посмотреть, что он будет выводить для свойства PropertyItems. Я считаю, что это набор байтовых массивов, поэтому вам нужно будет использовать пространство имен Encoding, чтобы получить из них строковое значение. – Justin

ответ

1

После Мессинг вокруг немного, здесь очень ограниченный пример того, как получить изображение мета-данные.

var image = System.Drawing.Image.FromFile(@"C:\your\image\here"); 

     foreach (var a in image.PropertyItems) 
     { 
      dynamic value; 

      switch (a.Type) 
       { 
       case 2: 
        value = Encoding.ASCII.GetString(a.Value); 
        break; 
       case 3: 
        value = BitConverter.ToInt16(a.Value, 0); 
        break; 
       case 4: 
        value = BitConverter.ToInt32(a.Value, 0); 
        break; 
       default: 
        value = "NaN"; 
        break; 
       } 

      Console.WriteLine("Type: {0} \r\n Value: {1}", a.Type, value); 
     } 

Вы можете найти более подробную информацию о Microsoft's site и поиск по спецификации Image Metadata полностью написать его самостоятельно.

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

+0

Спасибо @Justin. Вы знаете, есть ли способ доступа к подобным данным в других типах файлов? – Tester101

+0

Существует не одноразовое решение. Как и метаданные изображений, все файлы хранят свои метаданные другим способом и форматом. Для этого вам нужно будет найти спецификацию для файла, который вы хотите, и использовать существующую библиотеку или сделать свой собственный. – Justin

1

Вы пробовали класс FileSystemInfo?

http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.aspx

+0

Да. Но это не дает мне информацию, которую я хочу. Файл, который я тестирую, говорит «Создано: январь-24-13, 11:17:30» на вкладке «Общие» в «Проводнике», но говорит «Дата взята 12/09/2012 10:28 PM» на вкладке «Подробности» , Думаю, мне нужно немного обновить вопрос, чтобы сделать это более понятным. – Tester101

+0

Странно:/Может быть, pproblem - это что-то другое или неверная информация. Постепенно эти методы получают информацию, связанную с файлом. – Shaharyar

+0

, когда вы используете http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.creationtime.aspx в своем коде, что он точно возвращает @ Tester101? – RandomUs1r

1

Вы можете использовать File методы класса для этой цели:

File.GetCreationTime(filename) 
File.GetLastWriteTime(filename) 
File.GetLastAccessTime(filename) 
//and many more in the intellisense 
+0

См. Комментарий к предыдущему ответу и обновленный вопрос. – Tester101

Смежные вопросы