关于FTP的WINDOWS API函数
Public 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
在做FTP时,
手工能PING通FTP服务器,
但程序中使用该函数时,为什么常常出现返回值为0,
而导致连接不上FTP服务器,
Public Declare Function ftpOpenFile Lib "wininet.dll" Alias "ftpopenfilea" _
(ByVal hFtpSession As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
此参数lContext——要打开的文件的描述表标识符,请问具体参数意义,如何设置?
该函数是否与断点续传有关?
---------------------------------------------------------------
建议查看MSDN,还有什么比它更完整
---------------------------------------------------------------
Option Explicit
'########################################################################
'## ##
'## FTPAPI声明 ##
'## ##
'########################################################################
Public Const ERROR_NO_MORE_FILES = 18
Public Const ERROR_INTERNET_EXTENDED_ERROR = 12003
Public Const FTP_TRANSFER_TYPE_BINARY = &H2
Public Const FTP_TRANSFER_TYPE_ASCII = &H1
Public Const INTERNET_FLAG_PASSIVE = &H8000000
Public Const INTERNET_FLAG_RELOAD = &H80000000
Public Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Public Const INTERNET_FLAG_MULTIPART = &H200000
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_OPEN_TYPE_PROXY = 3
Public Const INTERNET_INVALID_PORT_NUMBER = 0
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_SERVICE_GOPHER = 2
Public Const INTERNET_SERVICE_HTTP = 3
Public Const MAX_PATH = 260
Public Const NO_ERROR = 0
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_OFFLINE = &H1000
Public Const INTERNET_DEFAULT_FTP_PORT = 21
Public Const INTERNET_DEFAULT_GOPHER_PORT = 70
Public Const INTERNET_DEFAULT_HTTP_PORT = 80
Public Const INTERNET_DEFAULT_HTTPS_PORT = 443
Public Const INTERNET_DEFAULT_SOCKS_PORT = 1080
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
'连接FTP服务器的操作函数
'打开连接internet的会话
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 Long
'sAgent--要调用internet对话的应用程序名
'lAccessType--请求的访问的类型,包括:
'INTERNET_OPEN_TYPE_PRECONFIG---预配置(缺省)
'INTERNET_OPEN_TYPE_DIRECT--直接指向internet
'INTERNET_OPEN_TYPE_PROXY--通过代理服务器连接
'sProxyName--如果lAccessType被设置为INTERNET_OPEN_TYPE_PROXY,该参数为
'代理服务器的名字
'sProxyBypass--包含一系列代理服务器地址的字符串
'lFlags--会话的选项,可包括下列值:
'INTERNET_FLAG_DONT_CACHE--不对数据进行本地缓冲或通过网关服务器缓冲
'INTERNET_FLAG_ASYNC--当操作完成时,将同INTERNET_STATUS_REQUEST_COMPLETE
'一起进行一个状态回调
'INTERNET_FLAG_OFFLINE--只通过永久缓冲进行下载操作
'打开一个根据连接类型的Internet连接
Public 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
'hInternetSession--函数InternetOpen()打开Internet对话返回的值
'sServerName--要连接的服务器的名称或IP
'nServerPort--该连接的Internet端口
'sUsername--登录的用户帐号
'sPassword--登录的口令
'lService--要连接的服务器类型(这里是连接FTP服务器,连接的类型为常数INTERNET_SERVICE_FTP)
'关闭Internet连接
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
'hInet--InternetConnect()函数返回的值
'文件查找操作
'在FTP连接中查找一个文件。在调用此函数后取得第一个文件后,可以接着调用FtpFindNextFile()
'获得下一个查到的FTP服务器上的文件。
Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
'lpszSearchFile--指向要搜索的文件名。可以通配符*.*的形式。
'lpFindFileData--用于装载与找到的文件有关的具体信息
'dwFlags--数据传输的方式,通常设置为0,(ASCII方式)
'继续由FtpFindFirstFile()函数发起的文件搜索操作
Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
(ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long
'hFind--FtpFindFirstFile()函数的返回值
'lpvFindData--用于装载与找到的文件有关的具体信息
'目录操作
'改变FTP服务器的当前目录。
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
'lpszDirectory--包含要到达的目录名。可以是相对的或绝对的路径。
'在ftp服务器上创建目录
Public Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
'lpszDirectory--包含要创建目录的字符串,可以是一个相对路径或绝对路径
'取得ftp当前的目录的名字
Public Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" _
(ByVal hFtpSession As Long, lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Boolean
'lpszCurrentDirectory--存放目录名字的字符串
'lpdwCurrentDirectory--目录名字字符串的字节数
'删除ftp服务器的一个目录
Public Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
'lpszDirectory--要删除的目录名称,可以是相对路径或绝对路径
'文件操作
'从ftp服务器上取得一个文件并保存在本地机器上,此函数包括了与从一个FTP服务器中读取一个文件
'并在本地保存等操作有关的所有功能
Public 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
'lpszRemoteFile--包含FTP服务器中要读的文件名
'lpszNewFile--在本地机器中要创建的文件名
'fFailIfExists--当为TRUE时,如果文件已经存在,则调用失败
'dwFlagsAndAttributes--文件的属性
'dwFlags--文件的传输方式可能包括下列值:
'FTP_TRANSFER_TYPE_ASCII--使用可以将控制和格式信息转换到本地对应文件的ASCII传输方式
'FTP_TRANSFER_TYPE_BINARY--使用把文件作为一个连续数据流传输的FTP图象传输方式,这种方式
'不区别在文件内部数据结构之间的任何分界(如行结束的回车标记)
'dwContext--要取回的文件的描述表标识符
'把一个文件上栽到FTP服务器上。其中包括了要将一个文件上载到FTP服务器上所有的有关操作
Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpS