Автор | Сообщение |
|
| |
Пост N: 10
Зарегистрирован: 02.07.12
|
|
Отправлено: 22.04.13 20:27. Заголовок: Непонятка с приемом файлов с FTP
Есть следующая задача, получение энного кол-ва файлов с FTP, которые попадают на FTP с рабочих машин скажем так сотрудников, необходимо этот процесс автоматизировать, дабы ручками не собирать их в архив. Для этого была написана программа для рекурсивного получения файлов с источника (то есть с ФТП). На фтп есть папки с видом код рабочего места -> дата за которую передана информация (где то так gerc\67701\22.04.2012\*.) Само получение информации с одного рабочего места проблем не возникает, но если в листинге программы далее идет получение информации с другого рабочего места, то в результате команда ЛИСТ получается пустая и соответственно файл(ы) не получены. вот часть листинга, с подробным описанием, где по вашему мнению может быть ошибка? Используется МиниГуи только для получения результатов на экран. Скрытый текст procedure datagerc() LOCAL lRetorno := .T., aGauge, nPos := 1, olddir, cFile:= "", cStr2, tt, dt2 Local dt:=SUBSTR(DTOC(DATE()),1,2)+"."+SUBSTR(DTOC(DATE()),4,2)+"."+SUBSTR(DTOC(DATE()),7,4) cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer cFile := "*.PSB" //файлы на ФТП olddir:= DIRCHANGE() DIRCHANGE(FoldDssIn) tt:=InputBoxDate("Введите дату формирования данных ГЕРЦ","Дата", DATE()) //задаем дату для получения информации dt2:=SUBSTR(DTOC(tt),1,2)+"."+SUBSTR(DTOC(tt),4,2)+"."+SUBSTR(DTOC(tt),7,4) // формат папки на сервере 02.01.2013 IF Len( cFile ) > 0 oUrl := tUrl():New( cUrl ) oFTP := tIPClientFtp():New( oUrl, .t. ) oFTP:nConnTimeout := 10000 oFTP:bUsePasv := .T. IF At( "@", cUser ) > 0 oFTP:oUrl:cServer := cServer oFTP:oUrl:cUserID := cUser oFTP:oUrl:cPassword := cPassword ENDIF addtextList1("Ждите, идет получение данных по отделению связи Б-Днестровский-1, 67701") IF oFTP:Open( cUrl ) oFtp:CWD( cPathFTP ) //переходим в каталог oFtp:CWD( "67701" ) // -/- oFTP:CWD(dt2) -//- FOR EACH cFile IN oFTP:listfiles(cFile) //даем команду ЛИСТ, проверяем есть ли такие файлы на ФТП oFtp:exGauge := { | done, size| ShowGaugePriem( done, size ) } IF !oFtp:DownloadFile( cFile[F_NAME] ) AddTextList1("На сервере отсутствуют данные за дату "+tt) MsgStop("На сервере отсутствуют данные за дату "+tt) lRetorno := .F. ELSE AddTextList1("данные по ОС 67701 за дату " + dt2 + " "+cFile[F_NAME] + " успешно получены ") lRetorno :=.T. ENDIF NEXT oFTP:CDUP() // новая команда, добавлена в ftpcli.prg, так как там нет такого метода //перемещается на предыдущий каталог oFTP:CDUP() /- oFTP:CDUP() // корневой каталог addtextList1("Ждите, идет получение данных по отделению связи Б-Днестровский-3, 67703") // пытаетмя получить данные по 2-й точке oFtp:CWD( cPathFTP ) //сменили каталог oFtp:CWD( "67703" ) //-- oFTP:CWD(dt2) // -/- FOR EACH cFile IN oFTP:listfiles(cFile) //даем команду ЛИСТ - И ВОТ ТУТ ТИПА ОШИБКИ, ВОЗВРАЩАЕТ ПУСТОЙ КАТАЛОГ, СООТВЕСТВЕННО ФАЙЛОВ НЕТ!!! oFtp:exGauge := { | done, size| ShowGaugePriem( done, size ) } IF !oFtp:DownloadFile( cFile[F_NAME] ) AddTextList1("На сервере отсутствуют данные за дату "+tt) MsgStop("На сервере отсутствуют данные за дату "+tt) lRetorno := .F. ELSE AddTextList1("данные по ОС 67703 за дату " + dt2 + " "+cFile[F_NAME] + " успешно получены ") lRetorno :=.T. ENDIF NEXT oFTP:CDUP() oFTP:CDUP() oFTP:CDUP() oFTP:Close()
| смотрел логи, в логе команда лист по 2-й точке (67703) показывает что нет файлов в данном каталоге, а точнее вообще ничего не показывает... Скрытый текст 20130421-22:22:56 :INETRECVLINE( <pointer>, , 128 ) >> 250 CWD command successful. "/GERC/67703/20.04.2013" is current directory. << 20130421-22:22:56 :INETERRORCODE( <pointer> ) >> 0 << 20130421-22:22:56 :INETSENDALL( <pointer>, 6, PASV<cr><lf> ) >> 6 << 20130421-22:22:56 :INETRECVLINE( <pointer>, , 128 ) >> 227 Entering Passive Mode (10,215,16,100,153,245). << 20130421-22:22:56 :INETERRORCODE( <pointer> ) >> 0 << 20130421-22:22:56 :INETSENDALL( <pointer>, 12, LIST *.PSB<cr><lf> ) >> 12 << 20130421-22:22:56 :INETERRORCODE( <pointer> ) >> 0 << 20130421-22:22:56 :INETRECVLINE( <pointer>, , 128 ) >> 150 Data connection accepted from 10.215.1.92:57052; transfer starting. << 20130421-22:22:56 :INETERRORCODE( <pointer> ) >> 0 << 20130421-22:22:56 :INETRECVLINE( <pointer>, , 128 ) >> 226 Transfer ok <<
|
|
|
|
Ответов - 63
, стр:
1
2
3
4
All
[только новые]
|
|
|
| |
Пост N: 3085
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.13 09:31. Заголовок: Eduard Начни с ручн..
Eduard Начни с ручной проверки о которой я выше написал. Нужно убедится что работает (или не работает)
|
|
|
|
| |
Пост N: 3086
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.13 10:56. Заголовок: Eduard пишет: Bulle..
Eduard пишет: Старенький и видимо глючненький. Я юзаю последнюю версию Gene6 (он же бывший BulletProof) CDUP понимает.
|
|
|
|
| |
Пост N: 20
Зарегистрирован: 02.07.12
|
|
Отправлено: 23.04.13 12:53. Заголовок: 100% глючит BulletPr..
100% глючит BulletProof FTP Server, поставил ради эксперимента на тестовую машину FileZilla server, создал там же идентичную структуру папок как на основном сервере, после в проге проверил получение файлов, результат на 100% рабочий.
|
|
|
|
| |
Пост N: 3087
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.13 13:15. Заголовок: Eduard пишет: 100% ..
Eduard пишет: цитата: | 100% глючит BulletProof FTP Server, поставил ради эксперимента на тестовую машину FileZilla server, |
| G6FTP Server не пробовал ? Юзаю его давно и в "бою" он проверен. Глюков нет.
|
|
|
|
| |
Пост N: 21
Зарегистрирован: 02.07.12
|
|
Отправлено: 23.04.13 14:35. Заголовок: Где подправить текст..
Где подправить текст, для показа строки выполнения, перестало показывать прогресс-бар % получения после замены сервера oFtp:exGauge := { | done, size| ShowGaugePriem( done, size ) } PROCEDURE ShowGaugePriem( nSent, nSize ) Local nValue nValue := 100 * nSent/nSize IF nSent > 0 ft_gerc.Text_1.Value := Str(nValue,3)+" %" ft_gerc.ProgressBar_1.value := nValue DO EVENTS ENDIF RETURN
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 02.07.12
|
|
Отправлено: 23.04.13 14:38. Заголовок: Dima пишет: G6FTP S..
Dima пишет: цитата: | G6FTP Server не пробовал ? |
| к сожалению на работе нет возможности скачать, инет на нашем предприятии заблокирован, придется дома скачивать...
|
|
|
|
| |
Пост N: 823
Зарегистрирован: 11.06.10
|
|
Отправлено: 23.04.13 15:14. Заголовок: Eduard пишет: инет ..
Eduard пишет: цитата: | инет на нашем предприятии заблокирован, придется дома скачивать... |
| Вот, как в стишке: откуда вирусишки, дома качаю, и на работу несу ...
|
|
|
|
| |
Пост N: 3093
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.13 22:37. Заголовок: AlexMyr пишет: дома..
AlexMyr пишет: цитата: | дома качаю, и на работу несу |
| Ну не факт
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 02.07.12
|
|
Отправлено: 23.04.13 22:48. Заголовок: Dima пишет: G6FTP S..
Dima пишет: цитата: | G6FTP Server не пробовал ? |
| попробовал G6FTP Server последнию версию, также пробовал BPFTP тоже из последних версий, результат - только первый проход... дальше не идет, благо у меня есть доступ через ВПН, к своим серверам на работе, немножко поигрался с фтп-серверами. Только в FileZille был получен отличный вариант - все файлы из папок скачались. Единственное что не работает в программе, отображение результатов работы в граф. виде (прогресс-бар), может что-то надо подправить в тексте программы? Скрытый текст PROCEDURE ShowGaugePriem( nSent, nSize ) Local nValue nValue := 100 * nSent/nSize IF nSent > 0 ft_gerc.Text_1.Value := Str(nValue,3)+" %" ft_gerc.ProgressBar_1.value := nValue DO EVENTS ENDIF RETURN
|
|
|
|
|
| |
Пост N: 3119
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.04.13 17:40. Заголовок: Теперь у меня полтер..
Теперь у меня полтергейст с приемом файлов с FTP На 15 точках стоит абсолютно одинаковая мой программа. На 14 точках все в шоколаде а на 15 не идет прием файлов. Затык на команде oFtp:downloadFile , судя по логам все красиво , но реально она возвращает .F. Судя по логам самого FTP тоже все красиво. Не пойму куда копать. Файер выключен. Антивируса нет , впрочем как и вирусов (проверяли не давно) Прием-передача идет в пассивном режиме , пробовали актив - не помогает. LIST директории показывает нормально. PS Harbour 3.2 + библа HBtip
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 21.04.13
|
|
Отправлено: 29.04.13 18:04. Заголовок: Свойства обозревателя, вкладка "Дополнительно"
IE, Свойства обозревателя, вкладка "Дополнительно" все параметры со словом FTP
|
|
|
|
|
| |
Пост N: 3120
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.04.13 18:07. Заголовок: petr707 Упс. Спасиб..
petr707 Упс. Спасибо , даже не знал что это может повлиять. Завтра проверим , отпишу.
|
|
|
|
| |
Пост N: 3121
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.04.13 19:39. Заголовок: да забыл добавить , ..
да забыл добавить , если с этой проблемной машины попробовать скачать этот же файл с заходом на FTP через браузер или FAR Manager или Total Commander, то проблем нет. проблема с закачкой файла именно в hbtip методом downloadFile , при чем только на этом компе. Что еще работает в Harbour с FTP кроме HBTIP и HBCURL ?
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 02.07.12
|
|
Отправлено: 29.04.13 20:57. Заголовок: Навряд ли параметры ..
Навряд ли параметры обозревателя будут влиять, надо что-то другое копать... да и там все то 2 параметра, которые по умолчанию включены (смотрел под 7-кой, думаю в ХР такие-же стоят): 1. Использовать пассивный FTP-протокол (для совместимости с браузерами и ДСЛ-модемами) 2. Разрешить просмотр FTP-папок (За пределами Internet Exp.)
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 21.04.13
|
|
Отправлено: 29.04.13 21:26. Заголовок: внешний вызов ftp.exe
hb_run("ftp.exe -n -s:get_ftp.txt") ... ---get_ftp.txt--- open cUrl user xxx passw cd /zzz binary get filename by 2)у HBTIP - только если параметр oFTP:nConnTimeout увеличить 3) права на локальный ресурс у процесса oFtp:DownloadFile( cLocalFile ,cRemoteFile) есть? 4) есть еще наколка - нельзя использовать в Passw символы типа % (нужно экранировать таким же), но если авторизация проходит, то дело не в этом
|
|
|
|
| |
Пост N: 3122
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.04.13 21:30. Заголовок: petr707 пишет: 2)у ..
petr707 пишет: цитата: | 2)у HBTIP - только если параметр oFTP:nConnTimeout увеличить |
| 20000 petr707 пишет: цитата: | 3) права на локальный ресурс у процесса oFtp:DownloadFile( cLocalFile ,cRemoteFile) есть? |
| да petr707 пишет: цитата: | 4) есть еще наколка - нельзя использовать в Passw символы типа % (нужно экранировать таким же), но если авторизация проходит, то дело не в этом |
| проходит
|
|
|
|
| постоянный участник
|
Пост N: 113
Зарегистрирован: 29.05.10
|
|
Отправлено: 30.04.13 08:36. Заголовок: Dima пишет: Что еще..
|
|
|
|
| |
Пост N: 3123
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.04.13 12:21. Заголовок: Нашли причину ;) Ран..
Нашли причину ;) Ранее программа лежала в папке d:\minisklad_shumen4 и прием не работал. Переименовали папку в d:\minisklad и все заработало. При чем только в активном режиме (пассив на прием так и не работает). Не нравится проге символ _ в папке или длинное имя ? Попробовал у себя , работает с любой папкой нормально. ХЗ что было. Может юзер накосячил с выбором в программе active/passive......... PS Рядом находится другая торговая точка и тот же провайдер но инет у них по WIFI и прием работает и в пассивном и активном режимах.
|
|
|
|
| |
Пост N: 3763
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.12.13 16:51. Заголовок: Косяки вылезают не п..
Косяки вылезают не понятные , может кто сталкивался (LIB : Hbtip) В папке на FTP лежит 3 ZIP файла с размерами 1.5 метра , 8 метров , 5 килобайт. ListFiles срабатывает нормально. Далее если массив не пустой в цикле сливаю 3- файла. Первый заходит нормально (размер 1.5 метра). На втором downloadFile выдает .F. и на 3-м тоже. Код примерно таков function Main() local cUrl := "ftp://" + "dima" + ":" + "pass" + "@" + "182.107.231.162" // адрес фтп я тут слегка исказил local aftp local i local ret:=.f. REQUEST HB_LANG_RUWIN REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) HB_LANGSELECT( 'RUWIN' ) cls oUrl := tUrl():New( cUrl ) oFTP := tIPClientFtp():New( oUrl, .f. ) // .t. если трассировка oFTP:nConnTimeout := 20000 oFTP:nDefaultPort:=21 oFTP:bUsePasv := .t. oFtp:exGauge := {| done, size | fShowGauge( done, size ) } IF oFTP:Open( cUrl ) ? "Open" if oFtp:Cwd("/minisklad/UPDATEMINI") ? "CWD" aftp:=oFtp:ListFiles("*.zip") ? len(aftp) aftp:=asort(aftp) if len(aftp)#0 for i=1 to len(aftp) ? aftp[ i ][1] ? aftp[ i ][2] ret:=oFtp:downloadFile(CurDrive()+":\"+CurDir()+"\"+aftp[1],aftp[ i ][1] ) ? ret next endif endif endif oFTP:Close() wait "Нажмите любую клавишу" return nil Func fShowGauge( nSent, nSize ) static lisik:=.t. if lisik @ 24,0 SAY "Получаю обновление: " + Replicate( "▒", 60 ) lisik:=.f. endif IF nSent > 0 @ 24, 20 SAY Replicate( "█", 60 * nSent / nSize ) ENDIF RETURN .t. файл на 8 метров ни при каких условиях сливаться не хочет
|
|
|
|
| |
Пост N: 86
Зарегистрирован: 21.04.13
|
|
Отправлено: 17.12.13 17:52. Заголовок: Пока можно включить трассировку в New( ...)
После каждого Download ставлю oFTP:reset()
|
|
|
Ответов - 63
, стр:
1
2
3
4
All
[только новые]
|
|