В Windows 7 я могу добавлять метаданные в файлы [с помощью Проводника], например, заголовок, рейтинг и так далее. Где именно хранятся эти метаданные?
Эти метаданные называются properties . Это доступно с Windows Vista.
Проводник Windows представляет свойства унифицированно, что может заставить вас думать, что все они из одного магазина. Но это не тот случай.
Свойства предоставляются программисту через API. (См. Ниже.)
Где именно они хранятся - это детали реализации. Это зависит от типа файла и типа свойства. Например, временные метки файловой системы отображаются как свойства. Метаданные мультимедийного файла, такие как EXIF для изображений или теги ID3 для MP3, хранятся в самом файле. Другие метаданные могут храниться в файле XML, сопровождающем файл, свойства которого вы проверяете.
Так где это хранится? Ответ таков: это действительно зависит, и вам действительно не нужно ни беспокоиться, ни беспокоиться. Потому что, как я уже сказал, это деталь реализации, а что касается программирования, то забота о деталях реализации означает обход API.
Вам также не нужно беспокоиться о том, где хранятся свойства при работе с ними на уровне API. См. IShellItem2
и IPropertyStore
COM-интерфейсы для точки входа.
Под капотом Windows Vista и более поздние версии поставляют обработчиков свойств , которые знают о типах файлов и о том, как читать и записывать их свойства. Вы можете написать свой собственный обработчик свойств (используя COM) и добавить его в Explorer (как так называемое расширение оболочки ).
Самая полезная документация, которую я нашел, - это записи в блоге Бена Караса во время выпуска Vista, начинающегося в августе 2006 года . Он сделал целую серию по системе собственности. Это очень полезный учебник, и для меня, используя Windows 7, он сработал на 100%.
Не следуйте советам, данным в другом ответе на этой странице, чтобы прочитать о COM Structured Storage . Это только для определенных типов файлов. В словах Бена Караса :
Попался: многие люди ошибочно называют StgOpenStorageEx
. Не делай этого! StgOpenStorageEx
поддерживается только для определенных форматов, таких как OLE Compound Documents или хранилище вторичного потока NTFS. StgOpenStorageEx
не знает, как прочитать заголовок EXIF из .JPG
изображения.