07.08.2009, 10:46 | #1 |
Участник
|
Проверка доступа к файлу
При попытке сохранить word-файл с помощью wordDoc.documentSaveAs(fileName); если к каталогу нет доступа получаем ошибку.
Как можно заранее опрелить есть ли у нас доступ к каталогу-файлу? Попытки использовать FileIOPermision не помогли. Все было бы нормально, но сообщение об ошибке иногда выходит под главной формой, и получается эффект зависания. |
|
07.08.2009, 12:20 | #2 |
Участник
|
Цитата:
|
|
07.08.2009, 14:23 | #3 |
Участник
|
Цитата:
DisplayAlerts помог, спасибо. Осталось избавится от следующей ошибки, чтобы пользователей не пугать: Метод "saveAs" в COM-объекте класса "_Document" возвратил код ошибки 0x800A1424 .... |
|
07.08.2009, 16:12 | #4 |
Участник
|
Цитата:
X++: int lines; // ... try { lines = infolog.lines(); comWord.SaveAs( filename ); } catch (Exception::Error) { infolog.cut( lines + 1 ); // удаляем сообщения об ошибках в COM-объекте из инфолога Box::warning( @"Фигня вышла..." ); } |
|
|
За это сообщение автора поблагодарили: alex55 (1), Corel (1). |
08.08.2009, 16:22 | #5 |
MCTS
|
Цитата:
Как можно заранее опрелить есть ли у нас доступ к каталогу-файлу?
X++: CommaIO file = new CommaIO(fileName, "r"); if (!file) info("ппц"); |
|
09.08.2009, 09:59 | #6 |
Участник
|
Это, я так понимаю, попытка открыть какой-то файл на чтение. Но если в нужном каталоге нет файлов? Или неизвестно, какие файлы есть, а права на листание каталога (перечисление его содержимого) отключены? Можно еще пробовать создать "тестовый" файл, но что если права на удаление файлов в каталоге отключены, и удалить потом "тестовый" файл не удастся? Или в каталоге уже есть файл с таким названием (а права на листание каталога отключены)? В общем, суета это все - надо просто отлавливать ошибки, а не пытаться предсказать их появление.
|
|
10.08.2009, 11:03 | #7 |
Участник
|
|
|
19.03.2018, 17:25 | #8 |
Участник
|
Всем добрый день!
Версия DAX 4.0. Как перехватить ошибку ComOfficeDocument_RU.documentSaveAs(..)? У меня такой код: X++: if (! excelDocument.documentSaveAs(documentName)) { excelDocument.quitApplication(true); return false; } X++: public boolean documentSaveAs(FilenameSave _filenameSave) { if (m_comDocument) { try { m_comDocument.saveAs(_filenameSave); } catch (Exception::Error) { error(this.getCOMErrorMsg()); return false; } } else { this.visible(true); throw error(strfmt("@GEE6401", this.getApplicationName())); } return true; } X++: m_comDocument.saveAs(_filenameSave); P.S. также пробовала Exception handling в своем методе вместо проверки boolean в виде X++: try { excelDocument.documentSaveAs(documentName)); } catch (Exception::Error) { excelDocument.quitApplication(true); return false; } то же самое.. просто не заходит в catch.
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг Последний раз редактировалось Cathome; 19.03.2018 в 17:32. |
|
19.03.2018, 17:49 | #9 |
Участник
|
Напишите просто catch без указания исключения. Если поймает то можно перебором выяснить какое реально исключение вылетает и обработать его.
|
|
19.03.2018, 18:05 | #10 |
Участник
|
Попробовала, не помогло. До catch просто не доходит..
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг |
|
19.03.2018, 18:08 | #11 |
Участник
|
у вас внутри транзакции происходит работа с файлом?
|
|
|
За это сообщение автора поблагодарили: Cathome (1). |
19.03.2018, 21:33 | #12 |
Участник
|
Спасибо за наводку, да, как оказалось, внутри транзакции.
Вот почитала для чайников. Убрала её, точнее, перенесла на уровень пониже, теперь всё работает, как надо!
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг |
|