2016-04-15 41 views
0

作爲VFP數據庫開發人員,需要創建一些CAB/ZIP文件(每日)並上傳到我們的ftp站點。我們正在使用Windows Server 2008 R2的這個自動exe文件。在從ftp站點上傳文件到運行windows server 2008R2的vfp EXE時,它只創建0 KB文件

以前它工作正常,但由於某種原因,我們重新安裝了服務器2008,所有服務器的更新,現在我的自動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類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 Server 2008 R2上的工作,在我的筆記本電腦(Windows 10),它工作正常。所以Windows更新有問題。在某些更新之前它正在正常工作,現在根本不工作 –

0

這是最有可能使用的是活動連接(互連LFLAGS參數0 - 也可能是防火牆在這種情況下阻止)。嘗試使用設置爲INTERNET_FLAG_PASSIVE LFLAGS:

定義INTERNET_FLAG_PASSIVE爲0x8000000