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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.12.2013, 17:41   #9  
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/.
Теги
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, время: 06:08.