2016-04-15 5 views
0

Будучи разработчиком базы данных VFP, для создания и загрузки на нашем ftp-сайте требуется некоторый файл CAB/ZIP (ежедневно). мы используем Windows Server 2008 R2 для этого авто exe.при загрузке файла на ftp-сайте из vfp EXE работает на сервере Windows 2008R2, он создает только файл 0 KB

Раньше он работал нормально, но по какой-то причине мы переустановили сервер 2008, со всеми обновлениями сервера, теперь мой auto-exe создает CAB-файл, а также загружает файл на ftp-сервер, но размер на нем равен 0 kb

Мы используем следующий код, чтобы загрузить файл CAB на FTP-сервер

FUNCTION FTPPut 

    PARAMETERS lcHost, lcUser, lcPassword, lcSource, lcTarget, lnXFerType 

    *................................................................................. 
    *................................................................................. 

    DECLARE INTEGER InternetOpen IN wininet.DLL; 
     STRING sAgent,; 
     INTEGER lAccessType,; 
     STRING sProxyName,; 
     STRING sProxyBypass,; 
     STRING lFlags 

    DECLARE INTEGER InternetCloseHandle IN wininet.DLL INTEGER hInet 

    DECLARE INTEGER InternetConnect IN wininet.DLL; 
     INTEGER hInternetSession,; 
     STRING lcHost,; 
     INTEGER nServerPort,; 
     STRING lcUser,; 
     STRING lcPassword,; 
     INTEGER lService,; 
     INTEGER lFlags,; 
     INTEGER lContext 

    DECLARE INTEGER FtpPutFile IN wininet.DLL; 
     INTEGER hConnect,; 
     STRING lpszLocalFile,; 
     STRING lpszNewRemoteFile,; 
     INTEGER dwFlags,; 
     INTEGER dwContext 

    PUBLIC hOpen, hftpSession 

    lcHost  = ALLTRIM(lcHost) 
    lcUser  = ALLTRIM(lcUser) 
    lcPassword = ALLTRIM(lcPassword) 
    lcSource = ALLTRIM(lcSource) 
    lcTarget = ALLTRIM(lcTarget) 

    IF connect2ftp (lcHost, lcUser, lcPassword) 
     WAIT WINDOW 'Transferring....' NOWAIT 
     IF FtpPutFile(hftpSession, lcSource,; 
       lcTarget, lnXFerType, 0) = 1 
      WAIT WINDOW lcSource + ' transferred.' TIMEOUT 2 
     ENDIF 

     = InternetCloseHandle (hftpSession) 
     = InternetCloseHandle (hOpen) 
    ENDIF 

заранее спасибо

ответ

2

Я не могу ответить на ваш вопрос, не зная, что программа «connect2ftp» делает, хотя я предположим, что он соединяется и работает ns FTP-соединение.

Возможно, вы захотите, чтобы вы включили lnXferType = 2, чтобы получить двоичную передачу.

Поскольку у меня нет коды для подключения вы используете, я предложу решение, мы всегда использовать для этого, Роберта Авраамова FTP Class 2,07 доступны для загрузки из http://leafe.com/download/ftpc_2.0.7_20090418.zip

Это очень маленькие и простой в использовании решения VFP, и загрузка файла выглядит следующим образом:

LOCAL loFTP 
SET PROCEDURE TO ftp.prg ADDITIVE 
loFTP=CREATEOBJECT('ftp_service') 

IF loFTP.OpenInternet("ABONNE", "PWD", "10.10.10.10", "21") 
    IF loFTP.PutFTPFile("any.txt","local.txt", FTP_TRANSFER_TYPE_BINARY) 
     ?STRTRAN("File %File% uploaded","%File%","local.txt") 
    ELSE 
     ?loFTP.GetExtendedErrorCode(),loFTP.GetExtendedErrorMsg() 
    ENDIF 
    =loFTP.CloseInternet() 
ENDIF 
RELEASE PROCEDURE ftp.prg 
+0

Большое спасибо за вашу помощь, однако до сих пор это не работает на сервере Windows 2008 R2, на моем ноутбуке (Windows 10) это работает отлично. Так что что-то не так с обновлениями Windows. перед некоторыми обновлениями он работал правильно, теперь не работал вообще –

0

это наиболее вероятно, что вы используете активное соединение (параметр Interconnect LFLAGS 0 - а также, возможно, брандмауэр блокирует в этом случае). Попробуйте использовать LFLAGS набор для INTERNET_FLAG_PASSIVE:

определяют INTERNET_FLAG_PASSIVE 0x8000000