在从ftp站点上传文件到运行windows server 2008R2的vfp EXE时,它只创建0 KB文件

问题描述:

作为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 

感谢

我不能回答你的问题不知道什么程序“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更新有问题。在某些更新之前它正在正常工作,现在根本不工作 –

这是最有可能使用的是活动连接(互连LFLAGS参数0 - 也可能是防火墙在这种情况下阻止)。尝试使用设置为INTERNET_FLAG_PASSIVE LFLAGS:

定义INTERNET_FLAG_PASSIVE为0x8000000