从运行Windows Server 2008R2的vfp EXE上传ftp站点上的文件时,它只创建0 KB文件

时间:2016-04-15 13:29:41

标签: windows-server-2008-r2 visual-foxpro

作为VFP数据库开发人员,需要在我们的ftp站点上创建并上传一些CAB / ZIP文件(每日)。我们正在使用Windows Server 2008 R2来实现这个自动exe。

以前它工作正常,但由于某种原因我们重新安装了服务器2008,所有服务器的更新,现在我的auto-exe创建CAB文件并在ftp服务器上传文件,但它在服务器上的大小为0 kb < / p>

我们使用以下代码将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 个答案:

答案 0 :(得分:2)

我无法在不知道程序“connect2ftp”的作用的情况下回答您的问题,尽管我假设它连接并打开FTP连接。

您可能希望确保包含lnXferType = 2,以便获得二进制传输。

由于我没有您正在使用的连接代码,我将提供我们一直使用的解决方案,Robert Abraham的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

答案 1 :(得分:0)

您很可能正在使用活动连接(InterConnect lFlags参数0 - 在这种情况下防火墙也可能阻塞)。尝试使用设置为INTERNET_FLAG_PASSIVE的lFlags:

定义INTERNET_FLAG_PASSIVE 0x8000000