22.07.2016, 11:05 | #1 |
Участник
|
WinApi::deleteFile
Создан класс RunBaseBatch, который удаляет файлы из папки
if (WinAPI::folderExists(#ExportPath)) { [handle, fileNameOpen] = WinAPI::findFirstFile(#ExportPath + "\\*.xlsx"); while (fileNameOpen) { createdDate = WinAPI::getFileCreatedDate(#ExportPath + "\\"+fileNameOpen); delta = systemDateGet() - createdDate; if(invoiceStorePeriod && delta >= invoiceStorePeriod) { if (WinApi::fileExists(#ExportPath + "\\"+fileNameOpen)) { WinApi::deleteFile(#ExportPath + "\\"+fileNameOpen); } } fileNameOpen = WinAPI::findNextFile(handle); } } Из job это все отлично работает и удаляет файлы из папки, а вот из класса не удаляет, в чем может быть проблема, подскажите пожалуйста. |
|
22.07.2016, 11:15 | #2 |
Участник
|
Джоб работает на клиенте, а класс наверняка на сервере. Если в пакетном режиме то клиентский метод WinApi::deleteFile может вообще по ошибке падать так как для пакета клиент отсутствует. В общем смотрите где работает код, какие он пути выгрузки получают, доступны ли они оттуда.
Если код серверный то используйте WinApiServer::deleteFile Также может потребоваться выставить Permission на удаление файла. |
|
22.07.2016, 15:14 | #3 |
Участник
|
попробуйте не WinApi, а NET
X++: boolean ret = true; FolderPath pathFrom, pathTo; FileName fullFileName; System.Exception clrException; ; pathFrom = this.getImportPath(); fullFileName = pathFrom + "\\" + _fileName; if (!System.IO.File::Exists(fullFileName)) { warning("Не найден файл " + fullFileName); return false; } pathTo = this.getImportPathLocal(); if (System.IO.File::Exists(pathTo + _fileName)) { System.IO.File::Delete(pathTo + _fileName); } try { System.IO.File::Move(fullFileName, pathTo + _fileName); } catch (Exception::CLRError) { ret = false; clrException = CLRInterop::getLastException(); if (clrException) { clrException = clrException.get_InnerException(); if (clrException) { error(clrException.get_Message()); } } } |
|
|
За это сообщение автора поблагодарили: Lemming (3). |
24.07.2016, 11:01 | #4 |
Участник
|
В чём разница? Некоторые методы WinApi, тот же fileExist, лишь .Net обёртки.
Цитата:
Если работаете с DAX 2012, взгяните на реализацию метода fileNameNext в Global. Последний раз редактировалось Товарищ ♂uatr; 24.07.2016 в 11:15. |
|
25.07.2016, 09:17 | #5 |
Боец
|
Держите корректную обработку, универсальную для клиентского и серверного исполнения + Batch. На этом постоянно приходилось спотыкаться.
X++: static boolean fileExists(FilePath _filePath) { boolean ret; ; if(isRunningOnServer()) { new FileIOPermission(_filePath, #io_read).assert(); //BP Deviation Documented ret = WinAPIServer::fileExists(_filePath); CodeAccessPermission::revertAssert(); } else { ret = WinAPI::fileExists(_filePath); } return ret; } X++: public static boolean moveFile(FilePath _filePathFrom, FilePath _filePathTo) { boolean ret; System.Exception ex; ; if (AXUtils::fileExists(_filePathFrom)) { if(isRunningOnServer()) { new InteropPermission(InteropKind::ClrInterop).assert(); try { System.IO.File::Move(_filePathFrom, _filePathTo); ret = true; } catch (Exception::CLRError) { ex = CLRInterop::getLastException(); error(ex.ToString()); } CodeAccessPermission::revertAssert(); } else { WinAPI::moveFile(_filePathFrom, _filePathTo); ret = true; } } else { info(StrFmt("File '%1' does not exist.", _filePathFrom)); } return ret; } X++: public static boolean deleteFile(FilePath _filePath) { boolean ret; ; if (AXUtils::fileExists(_filePath)) { if(isRunningOnServer()) { new FileIOPermission(_filePath, #io_write).assert(); //BP Deviation Documented ret = WinAPIServer::deleteFile(_filePath); CodeAccessPermission::revertAssert(); } else { ret = WinAPI::deleteFile(_filePath); } } else { ret = true; } return ret; } |
|
|
За это сообщение автора поблагодарили: AlexeyS (2), S.Kuskov (2), arhat (1). |
25.07.2016, 13:02 | #6 |
Участник
|
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
axaptapedia: WinAPI | 0 | |||
Dynamics AX Geek: Finding files with WinAPI | 1 | |||
Dynamics AX Geek: Finding files with WinAPI | 0 | |||
WinApi::deleteFile(filePath) | 3 | |||
WinApi. Удаление файлов глючит. | 10 |
|