Форум » [x]Harbour » Непонятка с приемом файлов с FTP » Ответить

Непонятка с приемом файлов с FTP

Eduard: Есть следующая задача, получение энного кол-ва файлов с FTP, которые попадают на FTP с рабочих машин скажем так сотрудников, необходимо этот процесс автоматизировать, дабы ручками не собирать их в архив. Для этого была написана программа для рекурсивного получения файлов с источника (то есть с ФТП). На фтп есть папки с видом код рабочего места -> дата за которую передана информация (где то так gerc\67701\22.04.2012\*.) Само получение информации с одного рабочего места проблем не возникает, но если в листинге программы далее идет получение информации с другого рабочего места, то в результате команда ЛИСТ получается пустая и соответственно файл(ы) не получены. вот часть листинга, с подробным описанием, где по вашему мнению может быть ошибка? Используется МиниГуи только для получения результатов на экран. [more]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()[/more] смотрел логи, в логе команда лист по 2-й точке (67703) показывает что нет файлов в данном каталоге, а точнее вообще ничего не показывает... [more]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 << [/more]

Ответов - 63, стр: 1 2 3 4 All

petr707: Возможно вся работа прогрессбара - укладывается в одну (последнюю) секунду. Аналогично происходит с HTTP_get HTTP_UPload - прогрессбар отражает ,видимо, реальную картину, HTTP_get - Градусник прогрессбара меняется в самом конце процесса, когда уже не нужен(неинтересно) Видимо, действует какое-то внутреннее кэширование.

Dima: petr707 да нет не в этом дело , я же выше писал. С сервером Gene6 прогресс бар работает нормально но с тем же файлом и сервером Filezilla он не работает потому что функция прописанная для exGauge в качестве принятых байт получает -1 (это я проверил)

petr707: -1 это еще неплохо, по крайней мере - это число В некоторых случаях valtype(..)#"N" Или разбираться в исходниках , или - забить...на градусник..




полная версия страницы