用WinINet Api 开发FTP客户端 (二)

本文详细介绍了如何使用WinINet API来开发FTP客户端。内容包括各种FTP相关函数的用途、参数及调用示例,如InternetOpen、InternetConnect、FtpCreateDirectory等,展示了它们之间的关系和在FTP操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FTP WinApi 函数详解


FTP 各函数间的关系

 

FTP函数工作时需要用到InternetConnect创建的FTP会话句柄。而InternetConnect函数需要用到由InternetOpen创建的HINTERNET句柄。下面这个图可以表示他们间的关系。

 

而对那些在线操作的一些命令来说,他们的关系可以用下面这个图表示。例如用于枚举当前目录下文件的两个命令FtpFindFirstFileInternetFindNextFile,之间就是InternetFindNextFile需要用到FtpFindFirstFile返回的一个句柄。

 

 

 

 

 

 

WinINet函数

函数

说明

连接

InternetOpen

初始化WinINet,返HINTERNET handles

InternetConnect

建立Internet连接,打开FTPGopher或者HTTP会话。返回HINTERNET handles

InternetCloseHandle

关闭Internet连接

目录操作

FtpCreateDirectory

FTP服务器上建立目录, 需要InternetConnect返回的会话句柄

FtpRemoveDirectory

FTP服务器上删除目录, 需要InternetConnect返回的会话句柄

FtpGetCurrentDirectory

获取当前在FTP服务器上的工作目录, 需要InternetConnect返回的会话句柄

FtpSetCurrentDirectory

设置在FTP服务器上的工作目录, 需要InternetConnect返回的会话句柄

文件操作

FtpFindFirstFile

FTP服务器上查找符合条件的文件或目录, 需要InternetConnect返回的会话句柄

InternetFindNextFile

FTP服务器上继续查找下一个符合条件的文件或目录,需要FtpFindFirstFile返回的会话句柄

FtpPutFile

上传一个文件到FTP服务器上, 需要InternetConnect返回的会话句柄

FtpGetFile

FTP服务器上下载一个文件, 需要InternetConnect返回的会话句柄

FtpDeleteFile

FTP服务器上删除一个文件, 需要InternetConnect返回的会话句柄

FtpRenameFile

FTP服务器上更改一个文件的名字, 需要InternetConnect返回的会话句柄

FtpOpenFile

FTP服务器上打开一个文件, 需要InternetConnect返回的会话句柄

InternetReadFile

直接FTP服务器上读取文件, 需要FtpOpenFile返回的会话句柄

InternetWriteFile

直接FTP服务器上写入文件, 需要FtpOpenFile返回的会话句柄

 

 

 

InternetOpen

功能:

初始化WinINet,返回HINTERNET handles

 

 

 

结构:

HINTERNET InternetOpen(

    IN LPCSTR lpszAgent,

    IN DWORD dwAccessType,

    IN LPCSTR lpszProxyName,

    IN LPCSTR lpszProxyBypass,

    IN DWORD dwFlags

);

 

 

 

参数:

lpszAgent :调用WinINet的应用程序名

dwAccessType :设置网络访问类型

常量

说明

INTERNET_OPEN_TYPE_DIRECT

1

直接连接到网络

INTERNET_OPEN_TYPE_PRECONFIG

0

从注册表或直接连接到网络

INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY

4

 

 

 

INTERNET_OPEN_TYPE_PROXY

3

使用代理

lpszProxyName :指定代理服务器的名字,访问类型设置为INTERNET_OPEN_TYPE_PROXY才有效

lpszProxyBypass :指定代理服务器的名字或地址,有设置此项时lpszProxyName指定的将失效

dwFlags

常量

说明

INTERNET_FLAG_ASYNC

0x10000000

使用异步连接

INTERNET_FLAG_FROM_CACHE

0x01000000

从缓存中返回

INTERNET_FLAG_OFFLINE

INTERNET_FLAG_FROM_CACHE

FROM_CACHE相同

 

 

 

 

 

 

 

 

 

VB调用声明:

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

 

 

 

 

 

 

InternetConnect

功能:

结构:

参数:

VB调用声明:

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

 

调用实例:

 

InternetCloseHandle

功能:

结构:

参数:

VB调用声明:

Public Declare Function InternetCloseHandle Lib "wininet.dll" _

    (ByVal hInet As Long) As Integer

 

调用实例:

 

FtpCreateDirectory

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" _

    (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean

调用实例:

 

FtpGetCurrentDirectory

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" _

    (ByVal hFtpSession As Long, lpszCurrentDirectory As String, ByRef lpdwCurrentDirectory As Long) As Boolean

调用实例:

 

FtpSetCurrentDirectory

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _

    (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String) As Boolean

调用实例:

 

FtpDeleteFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpDeleteFile Lib "wininet.dll" _

    Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, _

    ByVal lpszFileName As String) As Boolean

调用实例:

 

 

 

FtpGetFile

功能:

结构:

参数:

VB调用声明:

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

调用实例:

 

 

FtpPutFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _

    (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _

    ByVal lpszRemoteFile As String, _

    ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

调用实例:

 

FtpRemoveDirectory

功能:

结构:

参数:

VB调用声明:

调用实例:

 

FtpRenameFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpRenameFile Lib "wininet.dll" _

    Alias "FtpRenameFileA" (ByVal hFtpSession As Long, _

    ByVal lpszExisting As String, ByVal lpszNew As String) As Boolean

调用实例:

 

 

 

FtpFindFirstFile

功能:

结构:

参数:

VB调用声明:

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

调用实例:

 

InternetFindNextFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _

    (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long

调用实例:

 

 

FtpOpenFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function FtpOpenFile Lib "wininet.dll" Alias _

    "FtpOpenFileA" (ByVal hFtpSession As Long, _

    ByVal sFileName As String, ByVal lAccess As Long, _

    ByVal lFlags As Long, ByVal lContext As Long) As Long

调用实例:

 

InternetReadFile

功能:

结构:

参数:

VB调用声明:

Public Declare Function InternetReadFile Lib "wininet.dll" _

    (ByVal hFile As Long, _

    ByVal lpBuffer As String, _

    ByVal dwNumberOfBytesToRead As Long, _

    lpNumberOfBytesRead As Long) As Long

调用实例:

 

InternetGetLastReponseInfo

功能:

结构:

参数:

VB调用声明:

Public Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" ( _

    lpdwError As Long, _

    ByVal lpszBuffer As String, _

    lpdwBufferLength As Long) As Boolean

调用实例:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值