Создайте файл с хранилищем свойств Windows (метаданные) с помощью API win32.

Например, я хотел бы создать новый файл-заглушку "test.mp3" и добавить к нему свойство окна (например, System.Author).

решение должно использоваться для нескольких расширений файлов, таких как текст, изображение, видео и т. д.

Если я просто создаю файл и использую IShellItem2::GetPropertyStore, я получаю ошибку HRESULT для недопустимых аргументов.

Используйте IShellItem2::GetPropertyStore в реальном музыкальном файле, я могу читать и записывать его свойства просто отлично.

Сначала проверьте свои предложения.


person Carlos_rpg    schedule 11.02.2014    source источник


Ответы (1)


магазины свойств обычно получать доступ и хранить данные в самом файле. В вашем случае с файлом mp3 он будет пытаться читать и записывать теги ID3. Кроме того, хранилища свойств не хранятся в базе данных и не могут быть произвольно добавлены к файлам, которые их не поддерживают.

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

Наиболее вероятная причина, по которой ваш тест mp3 не проходит, заключается в том, что у вас есть пустой файл без данных и без действительных тегов ID3.

person Joshua    schedule 11.02.2014
comment
Я не понял вашего ответа. Я пытаюсь использовать систему свойств Windows ссылка Я могу использовать ее для изменения любого файла, сохраненного в PropertyStore. Скажем, текстовый документ, или jpeg, или mp3-файл и т. д. Мой вопрос: как сохранить файл с этими свойствами (например, MS Word для автора в файлах doc) - person Carlos_rpg; 12.02.2014
comment
Это не отменяет того, что сказал Иисус Навин. Вы не можете просто читать/записывать произвольные свойства в произвольных файлах. Тип файла должен быть зарегистрирован с помощью обработчика, который обеспечивает доступ к свойствам для этого типа файла. Некоторые типы файлов имеют специальные обработчики, реализованные самой Microsoft, для других требуются сторонние обработчики. DOC, JPG, MP3 — это типы файлов, специально предназначенные для хранения метаданных в самих файлах с помощью различных встроенных тегов/блоков. TXT, например, вообще не поддерживает встроенные метаданные. - person Remy Lebeau; 12.02.2014
comment
Я понимаю это, но это также не отвечает на мой вопрос. допустим, я хочу создать mp3-файл с установленным свойством Author. Как это сделать? - person Carlos_rpg; 12.02.2014
comment
Вы уже знаете, как, поскольку вы сказали в своем вопросе, если я использую реальный файл, он работает нормально. Ответ на ваш вопрос: вы не можете произвольно добавлять теги к файлам, которые их не поддерживают, и вам нужен действительный файл для работы встроенных обработчиков. Чтобы вы могли создать свой собственный файл и пометить его, вам необходимо создать действительный mp3-файл с тегами ID3, прежде чем Windows начнет с ним работать. - person Joshua; 12.02.2014
comment
Мне жаль. Я не понял, как вы это сказали. Я обнаружил, что каждый обработчик свойств считывает данные своих свойств из самого файлового потока. Таким образом, я могу написать mp3-файл, совместимый с ID3, и системный обработчик для этого типа файла будет загружен. Или я могу переопределить этот дескриптор и реализовать новый, где я могу читать поток и извлекать из него данные самостоятельно (но в этом случае я должен быть совместим с ID3, иначе мои реальные файлы больше не будут отображать его метаданные). В конце концов, было бы лучше сохранить эту информацию в базе данных и написать расширение оболочки для отображения информации, полученной из моей БД. - person Carlos_rpg; 12.02.2014
comment
Я думаю, это было именно то, что вы пытались сказать в ответе! Мне жаль. Ответ принят! - person Carlos_rpg; 12.02.2014