AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2016, 11:05   #1  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Джоб работает на клиенте, а класс наверняка на сервере. Если в пакетном режиме то клиентский метод WinApi::deleteFile может вообще по ошибке падать так как для пакета клиент отсутствует. В общем смотрите где работает код, какие он пути выгрузки получают, доступны ли они оттуда.
Если код серверный то используйте WinApiServer::deleteFile
Также может потребоваться выставить Permission на удаление файла.
Старый 22.07.2016, 15:14   #3  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
попробуйте не 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  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
265 / 808 (27) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от AlexeyS Посмотреть сообщение
попробуйте не WinApi, а NET
В чём разница? Некоторые методы WinApi, тот же fileExist, лишь .Net обёртки.

Цитата:
Сообщение от vikuss2006 Посмотреть сообщение
Из job это все отлично работает и удаляет файлы из папки, а вот из класса не удаляет, в чем может быть проблема, подскажите пожалуйста.
Logger ключевые причины проблемы озвучил. При отладке Аксапта файлы находит и какой из методов не срабатывает?
Если работаете с DAX 2012, взгяните на реализацию метода fileNameNext в Global.

Последний раз редактировалось Товарищ ♂uatr; 24.07.2016 в 11:15.
Старый 25.07.2016, 09:17   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Держите корректную обработку, универсальную для клиентского и серверного исполнения + 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  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
В чём разница? Некоторые методы WinApi, тот же fileExist, лишь .Net обёртки.
можно получить осмысленное сообщение об ошибке при exception
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: WinAPI Blog bot DAX Blogs 0 04.07.2011 12:11
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 1 08.10.2009 17:36
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 0 28.10.2006 16:40
WinApi::deleteFile(filePath) DreamCreator DAX: Программирование 3 30.11.2005 16:16
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.