02.11.2011, 14:15 | #1 |
Участник
|
Ах2009 Не дает удалить файл
Смотрю класс WinAPI
и метод X++: client static boolean deleteFile(str fileName) { ; try { if (WinAPI::fileExists(fileName)) { System.IO.File::Delete(fileName); return true; } return false; } catch(Exception::CLRError) { return false; } } А вот System.IO.File:elete(fileName); возвращает код ошибки 1, т.е. Неверная функция. Office на сервере 2010. Файл в сети. Пробовала указать и путь на локальный D. Права на сетевую папку у аос полные, у пользователя тоже. Причем создание файла в эту папку проходит успешно. Расширение файла xlt Почему может не удаляться файл? |
|
02.11.2011, 15:08 | #2 |
MCT
|
А физически удаляется из-под пользователя или АОС?
__________________
Axapta book for developer |
|
02.11.2011, 15:14 | #3 |
Участник
|
Если через проводник удаляется, то скорее всего сюрпризы .net.На время, пока ищите проблему можно использовать трешечный метод:
X++: client server static int deleteFile_3(str fileName) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _deleteFile = new DLLFunction(_winApiDLL, 'DeleteFileA'); _deleteFile.returns(ExtTypes::DWord); _deleteFile.arg(ExtTypes::String); if (_deleteFile.call(fileName) == 0) return WinAPI::getLastError(); return 0; }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.11.2011, 15:16 | #4 |
Участник
|
Да, физически удалить могу
|
|
02.11.2011, 15:17 | #5 |
Участник
|
а что с .net может быть не так? Версия не та или что?
|
|
02.11.2011, 15:31 | #6 |
Участник
|
Что с ним не так знает только Старик-Хоттабыч. Но у нас это тоже не работает именно на шаблонах excel. Мы до сих пор используем трешечный вариант удаления файла используя WinApi. Забраться внутрь .net-a, извините, лучше застрелиться.
Еще могу предположить, что скорее всего у Вас не будет работать и функция CopyFile или она будет ругаться не помню, но мы ее тоже пока заменили на трешечный вариант.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.11.2011, 15:41 | #7 |
Участник
|
Спасибо
|
|
02.11.2011, 16:06 | #8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
02.11.2011, 16:07 | #9 |
Участник
|
Да, кстати, это не работает на RU5. Сейчас проверил на RU6 - вроде как все в порядке.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.11.2011, 16:20 | #10 |
Участник
|
Если метода AifUtil::getClrErrorMessage() не найдется, то тогда так
X++: System.Exception exception; ... catch (Exception::CLRError) { exception = CLRInterop::getLastException(); while (exception) { error(exception.get_Message()); exception = exception.get_InnerException(); } return false; |
|
02.11.2011, 16:23 | #11 |
Ищущий знания...
|
У Вас файл удаляется сервером? Может тогда использовать класс WinAPIServer?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 02.11.2011 в 16:54. |
|
02.11.2011, 16:49 | #12 |
Участник
|
1. Проверил - если у файла имеется аттрибут "read Only" то попытка удаления файла с использованием System.IO.File:: Delete(_fileName) (будь то winApi::deleteFile или winapiServer::deletefile) вернет ошибку "Access to the path 'тра та та' is denied.
Поэтому для корректного удаления файлами придется проверить и установить атрибуты на файл с помощью функций winApi: getFileAttributes, setFileAttributes а уже после этого производить удаление. 2. Как правильно заметил LEV нужно определится на какой стороне (клиенте или сервере) удаляется файл ? Если файл удаляется сервером, то требуется использование класса winApiServer. Если клиентом - то при чем тут Цитата:
Права на сетевую папку у аос полные
Кстати на мысль с read Only навели ваши шаблоны ексель. Чаше всего они как раз read Only Последний раз редактировалось someOne; 02.11.2011 в 16:52. |
|