如题

解决方案 »

  1.   

    FtpFindFirstFile
    HINTERNET FtpFindFirstFile(
        IN HINTERNET hFtpSession,
        IN LPCSTR lpszSearchFile,
        OUT LPWIN32_FIND_DATA lpFindFileData,
        IN DWORD dwFlags,
        IN DWORD dwContext
    );Searches the specified directory of the given FTP session. File and directory entries are returned to the application in theWIN32_FIND_DATA structure. Returns a valid handle for the request if the directory enumeration was started successfully; otherwise, returns NULL. To get a specific error message, callGetLastError. If the function finds no matching files, GetLastError returns ERROR_NO_MORE_FILES. 
    hFtpSession 
    Valid handle to an FTP session returned from InternetConnect. 
    lpszSearchFile 
    Address of a null-terminated string that specifies a valid directory path or file name for the FTP server's file system. The string can contain wildcards, but no blank spaces are allowed. If the value of lpszSearchFile is NULL or if it is an empty string, it will find the first file in the current directory on the server. 
    lpFindFileData 
    Address of aWIN32_FIND_DATA structure that receives information about the found file or directory. 
    dwFlags 
    Application-defined value that associates this search with any application. Can be one of the following values: 
    INTERNET_FLAG_DONT_CACHE 
    Does not add the returned entity to the cache. Identical to the preferred value, INTERNET_FLAG_NO_CACHE_WRITE. 
    INTERNET_FLAG_HYPERLINK 
    Forces a reload if there was no Expires time and no Last-Modified time returned from the server when determining whether to reload the item from the network. 
    INTERNET_FLAG_MAKE_PERSISTENT 
    No longer supported. 
    INTERNET_FLAG_MUST_CACHE_REQUEST 
    Causes a temporary file to be created if the file cannot be cached. Identical to the preferred value, INTERNET_FLAG_NEED_FILE. 
    INTERNET_FLAG_NEED_FILE 
    Causes a temporary file to be created if the file cannot be cached. 
    INTERNET_FLAG_NO_CACHE_WRITE 
    Does not add the returned entity to the cache. 
    INTERNET_FLAG_RELOAD 
    Forces a download of the requested file, object, or directory listing from the origin server, not from the cache. 
    INTERNET_FLAG_RESYNCHRONIZE 
    Causes the FTP resource to be reloaded from the server. 
    dwContext 
    Application-defined value that associates this search with any application data. This parameter is used only if the application has already called InternetSetStatusCallback to set up a status callback function. 
    This function enumerates both files and directories. FtpFindFirstFile is similar to the Win32FindFirstFile function. Note, however, that only one FtpFindFirstFile can occur at a time within a given FTP session. The enumerations, therefore, are correlated with the FTP session handle. This is because the FTP protocol allows only a single directory enumeration per session. After calling FtpFindFirstFile and until calling InternetCloseHandle, the application cannot call FtpFindFirstFile again on the given FTP session handle. If a call is made to FtpFindFirstFile on that handle, the function will fail with ERROR_FTP_TRANSFER_IN_PROGRESS. After beginning a directory enumeration with FtpFindFirstFile, the InternetFindNextFile function can be used to continue the enumeration. The InternetCloseHandle function is used to close the handle returned from FtpFindFirstFile. If InternetCloseHandle closes the handle before InternetFindNextFile fails with ERROR_NO_MORE_FILES, the directory enumeration will be terminated. Because the FTP protocol provides no standard means of enumerating, some of the common information about files, such as file creation date and time, is not always available or correct. When this happens, FtpFindFirstFile and InternetFindNextFile fill in unavailable information with a best guess based on available information. For example, creation and last access dates will often be the same as the file's modification date. The application cannot call FtpFindFirstFile between calls to FtpOpenFile and InternetCloseHandle. 
      

  2.   

    ' 检查目录是否存在
        Dim pData As WIN32_FIND_DATA
        Dim hFind As Long, nLastError As Long
        strRemoteFolder = "test"
        pData.cFileName = String(MAX_PATH, 0)
        hFind = FtpFindFirstFile(hConnection, strRemoteFolder, pData, 0, 0)     ' 查找第一个文件或目录
        If hFind = 0 Then
            ' 没有找到
            Err.Clear
            
            ' 创建目录
            bRet = FtpCreateDirectory(hConnection, strRemoteFolder)
            If bRet = False Then
                ErrorOut Err.LastDllError, "FtpPutFile"
                GoTo Exit_Sub
            End If
            
        Else
            ' 已经存在
        End If