Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Как проверить является ли файл файлом Excel'я |
Автор: Yanis 22.9.2006, 10:06 | ||
Хочу сделать проверку файла на корректность при его открытии. Пробовал использовать функцию StgIsStorageFile, но она либо не подходит к файлам xls, либо у меня тоже руки не оттуда...
Но результат функции у меня всегда равен $80030002 (и при открытии doc файлов тоже). Что говорит об ошибке E_NOINTERFACE... Вобщем хотелось бы посмотреть на ваши варианты решения данной проблемы. |
Автор: Yanis 22.9.2006, 10:45 |
![]() Просто я ориентировался по этой странице: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/1992934e-9357-441a-889a-55ee4c8ba502.asp Добавлено @ 10:46 Да и к тому же как файл может быть не найден, если excel его открывает корректно. ![]() |
Автор: Damarus 22.9.2006, 10:53 | ||||||
Ну правильно:
Я плохо разбираюсь в Delphi, но возможно причина в том, что в OpenDialog1.FileName находится ANSI строка, а StgIsStorageFile требует UNICODE (PWideChar - это вроде приведение типа, как (LPWSTR)OpenDialog1.FileName в C). Извините если не прав. |
Автор: Yanis 22.9.2006, 10:56 | ||
Не исключено, что неправ я ![]()
Вот как выглядит приведение типов в Delphi: Добавлено @ 10:58 Я добавил в OpenDialog маску на *.xls файлы, но всё равно хочу сделать проверку программно. |
Автор: Damarus 23.9.2006, 09:19 | ||
Yanis, а что с кодировкой строки в OpenDialog1.FileName (ANSI/UNICODE)? Возможно стоит попробовать что то вроде MultiByteToWideChar? Или здесь:
ANSI-строка автоматически преобразуется в UNICODE? |
Автор: Yanis 25.9.2006, 11:20 | ||
Damarus Действительно, ты оказался прав с самого начала. Нужно было непосредственно конвертировать строку в Wide. Спасибо. Образовалась вот такая функция для проверки является ли файл структурированным хранилищем:
Может быть кому-нибудь понадобится. Damarus, спасибо! |