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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2011, 14:15   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Ах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;
    }
}
WinAPI::fileExists(fileName)) - он проходит
А вот System.IO.File:elete(fileName); возвращает код ошибки 1, т.е. Неверная функция.

Office на сервере 2010. Файл в сети. Пробовала указать и путь на локальный D. Права на сетевую папку у аос полные, у пользователя тоже.

Причем создание файла в эту папку проходит успешно.
Расширение файла xlt

Почему может не удаляться файл?
Старый 02.11.2011, 15:08   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
А физически удаляется из-под пользователя или АОС?
__________________
Axapta book for developer
Старый 02.11.2011, 15:16   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Да, физически удалить могу
Старый 02.11.2011, 15:14   #4  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Если через проводник удаляется, то скорее всего сюрпризы .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:17   #5  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
а что с .net может быть не так? Версия не та или что?
Старый 02.11.2011, 15:31   #6  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Arahnid Посмотреть сообщение
а что с .net может быть не так? Версия не та или что?
Что с ним не так знает только Старик-Хоттабыч. Но у нас это тоже не работает именно на шаблонах excel. Мы до сих пор используем трешечный вариант удаления файла используя WinApi. Забраться внутрь .net-a, извините, лучше застрелиться.
Еще могу предположить, что скорее всего у Вас не будет работать и функция CopyFile или она будет ругаться не помню, но мы ее тоже пока заменили на трешечный вариант.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 02.11.2011, 15:41   #7  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Спасибо
Старый 02.11.2011, 16:06   #8  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Смотрю класс WinAPI
и метод ...
Может вместо того чтобы гадать вставить строку в методе deleteFile, должно быть описание причины ошибки...
X++:
    catch(Exception::CLRError)
    {
        error(AifUtil::getClrErrorMessage());

        return false;
    }
За это сообщение автора поблагодарили: gl00mie (2).
Старый 02.11.2011, 16:07   #9  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Да, кстати, это не работает на RU5. Сейчас проверил на RU6 - вроде как все в порядке.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 02.11.2011, 16:20   #10  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Если метода 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  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Смотрю класс WinAPI
и метод

Почему может не удаляться файл?
У Вас файл удаляется сервером? Может тогда использовать класс WinAPIServer?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 02.11.2011 в 16:54.
Старый 02.11.2011, 16:49   #12  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
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.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
SysMailer, отправка PDF, приходит пустой файл ena_ax DAX: Программирование 12 19.11.2010 10:56
АХ2009: Print Medium (Канал вывода) у RunBaseReport отчетов DTD DAX: Программирование 3 23.06.2010 18:08
Как отправить файл с кодами, понятными принтеру, в порт принтера? miaa DAX: Программирование 19 18.05.2006 19:18
Как изменить загрузить файл лицензий не заходя в AXAPTA ? Ученик DAX: Администрирование 9 28.03.2005 23:34
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:45.