无法使用'FtpCreateDirectory'创建目录

问题描述 投票:0回答:1

这里是wininet.dll声明函数:

Private 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 Long

Private 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 Long

Private Declare Sub FtpCreateDirectory Lib "wininet.dll" _
                         Alias "FtpCreateDirectoryA" _
                        (ByVal hConnect As Long, _
                         ByVal lpszDirectory As String)

Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
                        (ByVal hConnect As Long, _
                         ByVal lpszDirectory As String) As Boolean

这是我的代码:

If FtpSetCurrentDirectory(hConnect, sDir) = False Then
    j = CountOccurrences(sDir, "/")
    Debug.Print "dir = " & sDir
    Debug.Print "j = " & j
    For i = 1 To j
        If i = 1 Then
            intOccChar = InStr(1, sDir, "/")
        Else
            intOccChar = InStr(intOccChar + 1, sDir, "/")
        End If
        Debug.Print "for i=" & i & " intOccChar = " & intOccChar
        Debug.Print Left(sDir, intOccChar)
        Debug.Print FtpSetCurrentDirectory(hConnect, Left(sDir,(intOccChar)))
        If FtpSetCurrentDirectory(hConnect, Left(sDir, (intOccChar))) = False Then 
            Call FtpCreateDirectory(hConnect, Left(sDir, (intOccChar)))  

        End If

    Next
End If

Call FtpSetCurrentDirectory(hConnect, sDir)

问题是:当ftp服务器上没有目录时,代码运行良好,但是当第一个目录存在时,则不创建子目录

这是立即Windows输出:

dir = AkhzaBank/80/2/Credit/
j = 4
for i=1 intOccChar = 10
AkhzaBank/
False
for i=2 intOccChar = 13
AkhzaBank/80/
False
for i=3 intOccChar = 15
AkhzaBank/80/2/
False
for i=4 intOccChar = 22
AkhzaBank/80/2/Credit/
False 

注意:代码适用于ftp上传和下载,唯一的问题是ftp服务器上的create directory

提前致谢

ftp access-vba
1个回答
0
投票

更新!!!!!!!!!!!!!!

我找到了一个解决方案

我不知道为什么,但不知怎的,这一行

如果Ftp SetCurrentDirectory(连接,左(sIde,(intO Char)))= False然后

在子文件夹中阻止创建目录。我只是删除这一行和代码工作。

真正的解决 我的错误在于以下几点:

Private Declare Sub FtpCreateDirectory Lib "wininet.dll" _
                         Alias "FtpCreateDirectoryA" _
                        (ByVal hConnect As Long, _
                         ByVal lpszDirectory As String)

我必须声明FtpCreateDirectory作为布尔函数而不是Sub!所以真正的声明函数是:

Private Declare Function FtpCreateDirectory Lib "wininet.dll" _
                         Alias "FtpCreateDirectoryA" _
                        (ByVal hConnect As Long, _
                         ByVal lpszDirectory As String) As Boolean 
© www.soinside.com 2019 - 2024. All rights reserved.