Я пытаюсь узнать, как читать / писать в расширенные свойства файла в C #, например, комментарий, битрейт, дату доступа, категорию и т. Д., Которые вы можете увидеть в проводнике Windows. Есть идеи, как это сделать? РЕДАКТИРОВАТЬ: в основном я буду читать / писать в видео файлы (AVI / DIVX / ...)
c#
extended-properties
Дэвид Хейс
источник
источник
Ответы:
Для тех, кто не без ума от VB, вот он на C #:
Обратите внимание, что вам необходимо добавить ссылку на Microsoft Shell Controls and Automation на вкладке COM диалогового окна References.
источник
Есть статья CodeProject для читателей ID3. И ветка на kixtart.org, в которой есть дополнительная информация о других свойствах. В принципе, вы должны вызвать
GetDetailsOf()
метод на папке объекта оболочки дляshell32.dll
.источник
Решение 2016
Добавьте в проект следующие пакеты NuGet:
Microsoft.WindowsAPICodePack-Shell
от MicrosoftMicrosoft.WindowsAPICodePack-Core
от MicrosoftЧитать и писать свойства
Важный:
Файл должен быть действительным, созданным с помощью определенного назначенного программного обеспечения. Каждый тип файла имеет определенные расширенные свойства файла, и не все из них доступны для записи.
Если вы щелкните правой кнопкой мыши файл на рабочем столе и не можете изменить свойство, вы также не сможете редактировать его в коде.
Пример:
Author
илиTitle
свойство.Так что не забудьте использовать
try
catch
Дополнительная тема: MSDN: реализация обработчиков свойств
источник
Этот пример в VB.NET читает все расширенные свойства:
Вы должны добавить ссылку на Microsoft Shell Controls and Automation на вкладке COM диалогового окна References .
источник
Спасибо, ребята, за эту ветку! Это помогло мне, когда я хотел выяснить версию файла exe. Однако мне нужно было самому разобраться в том, что называется расширенными свойствами.
Если вы откроете свойства файла exe (или dll) в проводнике Windows, вы получите вкладку «Версия» и представление дополнительных свойств этого файла. Я хотел получить доступ к одной из этих ценностей.
Решением этой проблемы является индексатор свойств FolderItem.ExtendedProperty, и если вы удалите все пробелы в имени свойства, вы получите значение. Например, версия файла называется FileVersion, и вот она.
Надеюсь, это поможет кому-то еще, просто подумал, что добавлю эту информацию в эту ветку. Ура!
источник
GetDetailsOf()
Метод - извлекает сведения об элементе в папке. Например, его размер, тип или время последнего изменения. Свойства файла могут различаться в зависимости отWindows-OS
версии.источник
Folder rFolder = shell.NameSpace(_rootPath);
. К вашему сведению, я использую ОС Windows 8.Использование:
Будет работать в версиях Windows, таких как Windows server 2008, где вы получите ошибку «Невозможно преобразовать COM-объект типа 'System .__ ComObject' в интерфейс типа 'Shell32.Shell'», если просто пытаетесь создать объект Shell32 в обычном режиме.
источник
shell
выполнить приведение к любому изIShellDispatch
интерфейсов (1-6) и напрямую вызвать член.Shell32.IShellDispatch ishell = (Shell32.IShellDispatch)shell; Shell32.Folder shellFolder = ishell.NameSpace(baseFolder);
Ответ Джеркера немного проще. Вот пример кода, который работает от MS :
Для тех, кто не может ссылаться на shell32 статически, вы можете вызвать его динамически следующим образом:
источник
Я не уверен, для каких типов файлов вы пытаетесь написать свойства, но taglib-sharp - отличная библиотека тегов с открытым исходным кодом, которая красиво обертывает всю эту функциональность. Он имеет много встроенной поддержки для большинства популярных типов файлов мультимедиа, но также позволяет выполнять более сложные теги практически для любого файла.
РЕДАКТИРОВАТЬ: я обновил ссылку на taglib sharp. Старая ссылка больше не работала.
РЕДАКТИРОВАТЬ: обновил ссылку еще раз за комментарий kzu.
источник
Вот решение для чтения, а не записи расширенных свойств, основанное на том, что я нашел на этой странице и в справке по объектам shell32 .
Чтобы было понятно, это взлом. Похоже, этот код по-прежнему будет работать в Windows 10, но затронет некоторые пустые свойства. Предыдущая версия Windows должна использовать:
В Windows 10 мы предполагаем, что есть около 320 свойств для чтения, и просто пропускаем пустые записи:
Как уже упоминалось, вам необходимо сослаться на сборку Com Interop.Shell32.
Если вы получите исключение, связанное с STA, вы найдете решение здесь:
Исключение при использовании Shell32 для получения расширенных свойств файла
Я понятия не имею, какими будут имена этих свойств в чужой системе, и не мог найти информацию о том, какие локализуемые константы использовать для доступа к словарю. Я также обнаружил, что не все свойства из диалогового окна «Свойства» присутствуют в возвращенном словаре.
Кстати, это ужасно медленно, и - по крайней мере, в Windows 10 - анализ дат в извлеченной строке был бы проблемой, поэтому использование этого кажется плохой идеей для начала.
В Windows 10 вам обязательно нужно использовать библиотеку Windows.Storage, которая содержит SystemPhotoProperties, SystemMusicProperties и т. Д. Https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-getting-file-properties
И , наконец, я отправил гораздо лучшее решение , которое использует WindowsAPICodePack там
источник