我利用VB做的FTP下载模块,前几天能正常下载根目录下任意文件夹中的文件,但上传时,只能传到根目录,不只为何?(以前正常上传,不受限,代码没有改)
今天突然发现下载只能下载FTP服务器设置的根目录下的文件,其他文件夹中的也不能下载了?
下边是我的程序代码,请高手指点一二:
函数声明:
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
ByVal dwContext As Long) As Boolean下载函数模块
Private Function FtbDownLoad_To_Local(ByVal soucePath As String, ByVal destinationPath As String _
, ByVal sFileName As String) As Boolean
'其中 sourcePath       为服务器的FTP目录下的 相对路径,如果就在FTP的目录下,则传入 为空字符串即可
'     destinationPath  为本机的路径
'     sFileName        为要下载的文件名称
   Dim lnginet
   Dim lnginetconn
   Dim blnRCOn Error GoTo err_L
   FtbDownLoad_To_Local = False
                                       'INTERNET_OPEN_TYPE_PRECONFIG
   lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _
   vbNullString, vbNullString, 0&)
    If lnginet Then
      lnginetconn = InternetConnect(lnginet, eWeb_address, 0, _
            eUser_name, ePassword, 1, 0, 0)
      If lnginetconn Then
          blnRC = FtpGetFile(lnginetconn, soucePath + sFileName, destinationPath + sFileName, 0, 0, 1, 0)
          If blnRC Then
             '下载成功
             FtbDownLoad_To_Local = False
          Else
             '下载失败
             FtbDownLoad_To_Local = True
          End If
          InternetCloseHandle lnginetconn
          InternetCloseHandle lnginet
      Else
         FtbDownLoad_To_Local = True
         MsgBox "FTP 服务器连接失败,请与系统管理员联系!", vbCritical, "文件下载"
      End If
    Else
         FtbDownLoad_To_Local = True
         MsgBox "FTP 服务器设置错误,请与系统管理员联系!", vbCritical, "文件下载"
    End If
    Exit Function
err_L:
    FtbDownLoad_To_Local = True
End Function

解决方案 »

  1.   

    1、你的代码应该没有问题。
    2、是否ftp服务器上的权限被限制了。
    3、如果ftp服务器是运行在unix、Linux上的,路径应该用"/",而非"\",并且路径名、文件名的大小写都要与服务器上的完全一致。
    4、以上问题需要联系ftp服务器的网管人员核对一下,或者,你用通用的ftp软件自己测试一下。
      

  2.   

    呵呵,搞定了,是我传入数据的格式问题
    但现在有个新问题
    下载完毕,不是通过  InternetCloseHandle lnginetconn 
                     InternetCloseHandle lnginet 
    函数已经关闭连接了吗。但是,有个程序调用后,发现还没有真正释放。要等一会才能释放,不知道怎么回事?因此而影响其他程序的运行(得等一会才能执行其后的代码)
      

  3.   

    是我传入数据的格式问题
    ====
    什么格式问题会导致这样?不是通过 InternetCloseHandle lnginetconn ,  InternetCloseHandle lnginet 
    函数已经关闭连接了吗。但是,有个程序调用后,发现还没有真正释放。
    =============
    如果在关闭句柄前最后一个执行ftp指令是失败的,那么在关闭句柄是会发生延时。你的情况可能与此有关。
      

  4.   

    是传入相对路径的问题
    在FTP根目录下,传入子文件夹 我写成了\aa\,应该前面没有\我执行ftp下载命令成功了啊,不应该发生关闭延时的问题吧
      

  5.   

    不知道你说的延时有多长时间,我以前遇到过的有时长达2、3分钟,发现原因是有ftp指令失败的情况。你的情况可能与我不同。不好意思,这个问题我只知道这么多,没有更好的建议给你了。