Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

**Как решить проблему с функцией StgOpenStorageEx в Delphi XE: ошибка EOleSysError "%1 could not be found"**

Delphi , Синтаксис , Справочник по API-функциям

Вопрос пользователя заключается в том, что при использовании функции StgOpenStorageEx для получения сводной информации о файле в среде Delphi XE возникает ошибка EOleSysError "%1 could not be found". Функция возвращает код ошибки -2147287038, что соответствует STG_E_FILENOTFOUND. Пользователь пытается получить сводную информацию из файлов различных типов, включая .doc, и сталкивается с этой проблемой.

Решение проблемы

Проблема заключается в неправильном использовании констант STGFMT, которые определяют формат хранения. Для файлов, имеющих встроенные свойства, такие как .doc, .xls, .msc, следует использовать STGFMT_STORAGE, а для файлов, которые могут быть обернуты в внешние свойства NTFS-5 в Windows Vista и выше, использовать STGFMT_FILE. Однако, согласно документации MSDN, для файлов .doc не следует использовать STGFMT_FILE, так как они являются составными файлами.

Шаги для решения ошибки:

  1. Используйте правильную константу STGFMT: Для файлов с встроенными свойствами используйте STGFMT_STORAGE, а для файлов без внутренних свойств, которые могут быть обернуты в NTFS-5 свойства, используйте STGFMT_DOCFILE вместо STGFMT_FILE.

  2. Проверьте тип файла: Убедитесь, что вы используете правильный тип константы STGFMT в соответствии с типом файла, с которым вы работаете.

  3. Проверьте имя файла: Убедитесь, что путь к файлу корректен и что файл существует в указанном пути.

  4. Проверьте кодировку строк: В Delphi XE и выше лучше использовать UnicodeString для работы со строками, особенно при работе с OLE функциями.

  5. Используйте функцию StringToOleStr: Вместо явного приведения типа строки используйте функцию StringToOleStr, которая может быть более надежной в различных средах.

  6. Проверьте файл на наличие свойств: Прежде чем пытаться получить свойства, убедитесь, что файл действительно содержит их.

  7. Обработка ошибок: Разделите вызов функции StgOpenStorageEx и вызов OleCheck на отдельные шаги, чтобы лучше отслеживать возможные ошибки.

Пример кода:

var
    res, open: HResult;
    stg: IStorage;
    PropSetStg: IPropertySetStorage;
    PropStg: IPropertyStorage;
    FileName: UnicodeString;
    // ... другие константы и объявления ...
begin
    FileName := ExtractFilePath(Application.ExeName) + 'testfile.doc';
    // Проверка на корректность использования STGFMT, например для .doc файла:
    // res := StgOpenStorageEx(PWideChar(FileName), ..., STGFMT_STORAGE, ...);
    // ... остальной код ...
end;

Следуя этим шагам, вы сможете устранить ошибку EOleSysError "%1 could not be found" и корректно получить сводную информацию о файле в Delphi XE.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с ошибкой при попытке получить сводную информацию о файле в среде Delphi XE с использованием функции `StgOpenStorageEx`, из-за неправильного использования констант `STGFMT` и возможных проблем с путем к файлу или его наличием.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:11:38/0.0032510757446289/0