24.09.2012, 16:38 | #1 |
Участник
|
передача файла на FTP
Здравствуй, необходимо передать файл на ftp клиента,
Использую класс winInet winInet = new WinInet(); code1 = winInet.internetConnect("192,192,192,192", "login", "Password"); if (!code1) code2 = winInet.ftpPutFile(code1,filefolder,_fileName); Файл передает но в корень, а мне необходимо сохранять по \\192,192,192,192\catalog1\catalog2 Как указать путь куда необходимо сохранять? |
|
24.09.2012, 17:16 | #2 |
Программатор
|
|
|
|
За это сообщение автора поблагодарили: Ksizorg (1). |
25.09.2012, 17:01 | #3 |
Участник
|
Axapta 3.0
Не получилось( Правда ссылка помогла директорию указать на ftp X++: static void Job227(Args _args) { int code1,code2; filename _fileName; FileFolder_RU filefolder; WinInet winInet; boolean ret; ; _filename = "P00090019_171707.flg"; filefolder ="\\\\192.0.0.1\\all-data\\krokus"+'\\'+_fileName; winInet = new WinInet(); code1 = winInet.internetConnect("192.192.192.192", "login", "pass"); ret = wininet.ftpSetCurrentDirectory(code1,"in\\orders"); if (code1) code2 = winInet.ftpPutFile(code1,filefolder,_fileName); } |
|
25.09.2012, 17:29 | #4 |
Программатор
|
ругается как то?
может тут много слэшей? filefolder ="\\\\192.0.0.1\\all-data\\krokus"+'\\'+_fileName; |
|
26.09.2012, 08:54 | #5 |
Участник
|
Нет не ругается просто переменной code2 присваивает 0 и файл не передает, по поводу слешей то я по разному пробовал и с локального диска и с сетевого, и слешы менял и количество тоже менял (вообще аксапта как то странно со слешами работает, если эту переменную посмотреть в дебагере, то количество слешей как и должно быть), не помогло, получилось отправить только с сервера и только с локального диска с моей машины нет, хотя по filezila нормально передаю
|
|
27.09.2012, 14:57 | #6 |
Участник
|
На сервере работает, а с другой машины нет?
Proxy используется? |
|
11.12.2013, 13:22 | #7 |
Moderator
|
Добрый день!
Не подскажите, как можно перебрать файлы на ftp? Axapta 3.0 SP3 X++: static void testConnect2FTP(Args _args) { str ftp='our-ftp.local'; str username='admin'; str pass='123'; WinInetClient winInet = new WinInetClient(); int code1; int code2; Filename fileNamePng; int handlePng = 0; FileFolder_RU fileFolder = @"ftp://our-ftp.local/Pictures/images/catalog/products/angle/"; ; code1 = winInet.internetConnect(ftp, username, pass); if (!code1) throw error("Не удалось подключиться к ftp-серверу!"); code2 = winInet.ftpSetCurrentDirectory(code1, "/Pictures/images/catalog/products/angle/"); // А дальше как? // Попытка перебрать файлы, как в обычной папке - handlePng всегда -1, т.е. findFirstFile файлов не видит, хотя в проводнике по этому пути они отображаются [handlePng, fileNamePng] = WinApi::findFirstFile(fileFolder + "*.*"); if (handlePng != -1) { while (fileNamePng) { info(fileNamePng); fileNamePng = WinApi::findNextFile(handlePng); } } WinApi::findClose(handlePng); } Последний раз редактировалось DreamCreator; 11.12.2013 в 13:24. |
|
11.12.2013, 13:47 | #8 |
Участник
|
По-моему, надо копать в сторону FtpFindFirstFile/InternetFindNextFile
|
|
|
За это сообщение автора поблагодарили: DreamCreator (3). |
13.12.2013, 17:41 | #9 |
Moderator
|
Так и не разобрался как перебрать файлы 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; X++: WIN32_FIND_DATA FileData; 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 : ""; } Затем стал искать примеры на С# - нашел замечательный код. Просто вставил его в консольный проект и сразу получил список директорий с ftp://mirror.yandex.ru/. |
|
13.12.2013, 18:22 | #10 |
Участник
|
вот тут FTP FtpFindFirstFileA реализация?
посмотрите описание необходимых функций FtpFindFirstFile/InternetFindNextFile |
|
|
За это сообщение автора поблагодарили: DreamCreator (3). |
14.12.2013, 11:12 | #11 |
Участник
|
Была аналогичная задача по FTP, плюс необходимо было чтобы работало все через proxy (а это задача, штатными средствами, практически невыполнимая с FTP), решил библиотекой: http://winscp.net/eng/docs/library Несколько лет эксплуатации - полёт нормальный. В дополнение получаете SFTP и SCP.
|
|
|
За это сообщение автора поблагодарили: DreamCreator (3), AvrDen (1). |
14.12.2013, 23:48 | #12 |
Moderator
|
Большое Спасибо! Вот полученный код перебора файлов на ftp:
X++: str ftp='our-ftp.local'; str username='admin'; str pass='123'; Path path = "/Pictures/images/catalog/products/angle/"; WinInet winInet = new WinInet(); int handler; boolean res; FileName fileName; Container con; int i; ; handler = winInet.internetConnect(ftp, username, pass); if (!handler) throw error("Не удалось подключиться к ftp-серверу!"); res = winInet.ftpSetCurrentDirectory(handler, path); if(!res) throw error("Не удалось установить нужную директорию"); [handler, fileName] = winInet.ftpFindFirstFile(handler, "*.png"); print fileName; while(fileName) { i++; con = winInet.ftpFindNextFile(handler); fileName = conpeek(con, 2); if(fileName) { print strFmt("%1 %2", i, fileName); } } |
|
26.04.2019, 18:28 | #13 |
Участник
|
Подскажите, а у Вас не осталось кода, с помощью которого можно было бы копировать файлы на SFTP сервер с помощью АХ?
|
|
26.04.2019, 19:32 | #14 |
Участник
|
Мы используем библиотеку WinSCP
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег. |
|
29.04.2019, 20:03 | #16 |
Участник
|
Цитата:
Сообщение от demianimp
Мы используем библиотеку WinSCP
|
|
30.04.2019, 12:52 | #17 |
Участник
|
Цитата:
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег. |
|
01.05.2019, 20:46 | #18 |
Участник
|
System.Net.WebClient
System.Net.NetworkCredential |
|
Теги |
ftp |
|
Похожие темы | ||||
Тема | Ответов | |||
работа по FTP | 9 | |||
Ax2009 Название файла при создании dbf | 2 | |||
Сохранение файла на FTP | 1 | |||
FTP в AX4 | 14 |
|