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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.12.2013, 17:41   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Так и не разобрался как перебрать файлы c ftp из Аксапты, напишу все что нашел - может кому-нибудь пригодится.

Из приведенной ссылки понял что надо реализовать 2 метода FtpFindFirstFile и FtpFindNextFile, нашел пример на С++:

X++:
if(hConnect){
            cout<<"begin transfer……"<<endl;
            find=::FtpFindFirstFile(hConnect,ftpDir,&data,INTERNET_FLAG_RELOAD,0);
            cout<<"begin?-->"<<data.cFileName<<endl;
            while(::InternetFindNextFile(find,&data)){
                CString tempFtp=ftpDir;
                CString tempLocal=localDir;
                cout<<"file:"<<data.cFileName<<endl;
Сразу встал вопрос как передавать &data, в С++ он объявляется как:
X++:
WIN32_FIND_DATA FileData;
Как я понимаю это ссылка на структуру, или на класс. Т.е. структура или класс передается по значению. Далее стал смотреть какие типы можно передать из Аксапты и как с ними работать. Вот пример чтения файла с ftp, используется тип Pointer (хоть это указатель, а не ссылка - но ближе типа к ссылке я не нашел)

X++:
    _internetReadFile = new DLLFunction(_winInet,"InternetReadFile");
    _internetReadFile.returns(ExtTypes::DWORD);
    _internetReadFile.arg(ExtTypes::DWORD);
    _internetReadFile.arg(ExtTypes::POINTER);
    _internetReadFile.arg(ExtTypes::DWORD);
    _internetReadFile.arg(ExtTypes::Pointer);
И сам метод чтения файла:
X++:
str internetReadFile(int hdl)
{
    Binary _buffer = new Binary(2048);
    Binary _bytesRead = new Binary(4);
    str result;
    boolean ret;
    int done = 0;

    while (! done)
    {
        ret = _internetReadFile.call(hdl,_buffer,2000,_bytesRead);
        if ((! _bytesRead.dWord(0)) || (! ret))
            done = 1;
        else
        {
            result += subStr(_buffer.string(0),1,_bytesRead.dWord(0));
        }
    }
    return ret ? result : "";
}
В методе используется тип Binary - похоже здесь побайтно читается файл. Алгоритм нетривиальный для меня.

Затем стал искать примеры на С# - нашел замечательный код. Просто вставил его в консольный проект и сразу получил список директорий с ftp://mirror.yandex.ru/.
Старый 13.12.2013, 18:22   #2  
michel1971 is offline
michel1971
Участник
 
79 / 80 (3) ++++
Регистрация: 14.01.2011
вот тут FTP FtpFindFirstFileA реализация?
посмотрите описание необходимых функций FtpFindFirstFile/InternetFindNextFile
За это сообщение автора поблагодарили: DreamCreator (3).
Старый 14.12.2013, 11:12   #3  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Была аналогичная задача по FTP, плюс необходимо было чтобы работало все через proxy (а это задача, штатными средствами, практически невыполнимая с FTP), решил библиотекой: http://winscp.net/eng/docs/library Несколько лет эксплуатации - полёт нормальный. В дополнение получаете SFTP и SCP.
За это сообщение автора поблагодарили: DreamCreator (3), AvrDen (1).
Старый 26.04.2019, 18:28   #4  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Подскажите, а у Вас не осталось кода, с помощью которого можно было бы копировать файлы на SFTP сервер с помощью АХ?
Старый 26.04.2019, 19:32   #5  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Мы используем библиотеку WinSCP
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 29.04.2019, 20:03   #6  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от demianimp Посмотреть сообщение
Мы используем библиотеку WinSCP
Подскажите, а Вы на какой версии АХ используйте данную библиотеку? При попытке добавить Reference на АХ 4, возникает ошибка, что DLL имеет неверный тип. В тоже время на АХ2012 все работает отлично. Может быть кто-нибудь знает как обойти данное ограничение?
Старый 30.04.2019, 12:52   #7  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Подскажите, а Вы на какой версии АХ используйте данную библиотеку? При попытке добавить Reference на АХ 4, возникает ошибка, что DLL имеет неверный тип. В тоже время на АХ2012 все работает отлично. Может быть кто-нибудь знает как обойти данное ограничение?
Можно попробовать решение от Raven Melancholic.
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Теги
ftp

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
работа по FTP mit DAX: Программирование 9 19.09.2014 10:05
Ax2009 Название файла при создании dbf Arahnid DAX: Программирование 2 23.08.2012 23:12
Сохранение файла на FTP yahenz DAX: Программирование 1 27.12.2011 09:45
FTP в AX4 sukhanchik DAX: Программирование 14 07.10.2009 12:52
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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