CFtpConnection 类

管理与 Internet 服务器的 FTP 连接,并允许直接操作此服务器上的目录与文件。

语法

class CFtpConnection : public CInternetConnection

成员

公共构造函数

名称 描述
CFtpConnection::CFtpConnection 构造 CFtpConnection 对象。

公共方法

名称 描述
CFtpConnection::Command 向 FTP 服务器直接发送命令。
CFtpConnection::CreateDirectory 在服务器上创建目录。
CFtpConnection::GetCurrentDirectory 获取此连接的当前目录。
CFtpConnection::GetCurrentDirectoryAsURL 获取此连接的当前目录作为 URL。
CFtpConnection::GetFile 从连接的服务器中获取文件
CFtpConnection::OpenFile 打开连接的服务器上的文件。
CFtpConnection::PutFile 将文件放在服务器上。
CFtpConnection::Remove 从服务器中删除文件。
CFtpConnection::RemoveDirectory 从服务器中删除指定的目录。
CFtpConnection::Rename 重命名服务器上的文件。
CFtpConnection::SetCurrentDirectory 设置当前 FTP 目录。

备注

FTP 是 MFC WinInet 类识别的三项 Internet 服务之一。

若要与 FTP Internet 服务器通信,必须先创建 CInternetSession 的实例,然后创建 CFtpConnection 对象。 请勿直接创建 CFtpConnection 对象,而应调用 CInternetSession::GetFtpConnection,后者将创建 CFtpConnection 对象并返回指向它的指针。

若要详细了解 CFtpConnection 如何与其他 MFC Internet 类配合工作,请参阅使用 WinInet 进行 Internet 编程一文。 有关与其他两个受支持的服务(HTTP 和 gopher)通信的详细信息,请参阅 CHttpConnectionCGopherConnection 类。

示例

请参阅 CFtpFileFind 类概述中的示例。

继承层次结构

CObject

CInternetConnection

CFtpConnection

要求

标头:afxinet.h

CFtpConnection::CFtpConnection

调用此成员函数来构造 CFtpConnection 对象。

CFtpConnection(
    CInternetSession* pSession,
    HINTERNET hConnected,
    LPCTSTR pstrServer,
    DWORD_PTR dwContext);

CFtpConnection(
    CInternetSession* pSession,
    LPCTSTR pstrServer,
    LPCTSTR pstrUserName = NULL,
    LPCTSTR pstrPassword = NULL,
    DWORD_PTR dwContext = 0,
    INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
    BOOL bPassive = FALSE);

参数

pSession
指向相关 CInternetSession 对象的指针。

hConnected
当前 Internet 会话的 Windows 句柄。

pstrServer
指向包含 FTP 服务器名称的字符串的指针。

dwContext
操作的上下文标识符。 dwContext 标识 CInternetSession::OnStatusCallback 返回的操作的状态信息。 默认设置为 1;但是,可以为操作显式分配特定的上下文 ID。 该对象及其执行的任何工作都将与该上下文 ID 相关联。

pstrUserName
指向一个以 NULL 结尾的字符串的指针,该字符串指定要登录的用户的名称。 如果为 NULL,默认为匿名。

pstrPassword
指向一个以 NULL 结尾的字符串的指针,该字符串指定用于登录的密码。 如果 pstrPassword 和 pstrUserName 均为 NULL,则默认匿名密码是用户的电子邮件名称。 如果 pstrPassword 为 NULL(或空字符串),但 pstrUserName 不是 NULL,则使用空白密码。 下表描述了 pstrUserName 和 pstrPassword 的四种可能设置的行为

pstrUserName pstrPassword 发送到 FTP 服务器的用户名 发送到 FTP 服务器的密码
NULL 或“ ” NULL 或“ ” “匿名” 用户的电子邮件名称
非 NULL 字符串 NULL 或“ ” pstrUserName [.]
NULL 非 NULL 字符串 ERROR ERROR
非 NULL 字符串 非 NULL 字符串 pstrUserName pstrPassword

nPort
标识要在服务器上使用的 TCP/IP 端口的数字。

bPassive
为此 FTP 会话指定被动模式或主动模式。 如果设置为 TRUE,则会将 Win32 API dwFlag 设置为 INTERNET_FLAG_PASSIVE

注解

请勿直接创建 CFtpConnection 对象。 请改为调用可创建 CFptConnection 对象的 CInternetSession::GetFtpConnection

CFtpConnection::Command

向 FTP 服务器直接发送命令。

CInternetFile* Command(
    LPCTSTR pszCommand,
    CmdResponseType eResponse = CmdRespNone,
    DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
    DWORD_PTR dwContext = 1);

参数

pszCommand
指向包含待发送命令的字符串的指针。

eResponse
指定是否预期从 FTP 服务器获得响应。 可以是以下其中一个值:

  • CmdRespNone 不会有响应。
  • CmdRespRead 预计有响应。
  • CmdRespWrite 未使用。

CmdResponseType 是 CFtpConnection 的成员,在 afxinet.h 中定义

dwFlags
包含控制此函数的标志的值。 有关完整列表,请参阅 FTPCommand

dwContext
指向一个值的指针,该值包含用于在回调中标识应用程序上下文的应用程序定义的值。

返回值

如果成功,则不为 0;否则为 0。

备注

此成员函数模拟 FTPCommand 函数的功能,如 Windows SDK 中所述。

如果出现错误,则 MFC 会引发 CInternetException 类型的异常。

CFtpConnection::CreateDirectory

调用此成员函数以在连接的服务器上创建目录。

BOOL CreateDirectory(LPCTSTR pstrDirName);

参数

pstrDirName
一个指针,指向包含要创建的目录名称的字符串。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Windows 函数 GetLastError 以确定错误原因。

备注

使用 GetCurrentDirectory 确定此服务器连接的当前工作目录。 请勿假定远程系统已将你连接到根目录。

pstrDirName 参数可以是部分或完全限定的文件名(相对于当前目录)。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 CreateDirectory 在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::GetCurrentDirectory

调用此成员函数,获取当前目录的名称。

BOOL GetCurrentDirectory(CString& strDirName) const;

BOOL GetCurrentDirectory(
    LPTSTR pstrDirName,
    LPDWORD lpdwLen) const;

参数

strDirName
对将接收目录名称的字符串的引用。

pstrDirName
指向将接收目录名称的字符串的指针。

lpdwLen
指向包含以下信息的 DWORD 的指针:

输入时:pstrDirName 引用的缓冲区大小

返回时:存储到 pstrDirName 的字符数。 如果成员函数失败并返回 ERROR_INSUFFICIENT_BUFFER,则 lpdwLen 包含字节数,应用程序必须分配该字节数才能接收字符串

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

注解

若要改为以 URL 的形式获取目录名称,请调用 GetCurrentDirectoryAsURL

参数 pstrDirName 或 strDirName 可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 GetCurrentDirectory 在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::GetCurrentDirectoryAsURL

调用此成员函数,以 URL 的形式获取当前目录的名称。

BOOL GetCurrentDirectoryAsURL(CString& strDirName) const;

BOOL GetCurrentDirectoryAsURL(
    LPTSTR pstrName,
    LPDWORD lpdwLen) const;

参数

strDirName
对将接收目录名称的字符串的引用。

pstrDirName
指向将接收目录名称的字符串的指针。

lpdwLen
指向包含以下信息的 DWORD 的指针:

输入时:pstrDirName 引用的缓冲区大小

返回时:存储到 pstrDirName 的字符数。 如果成员函数失败并返回 ERROR_INSUFFICIENT_BUFFER,则 lpdwLen 包含字节数,应用程序必须分配该字节数才能接收字符串

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

备注

GetCurrentDirectoryAsURLGetCurrentDirectory 的行为相同

参数 strDirName 可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 GetCurrentDirectoryAsURL 在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::GetFile

调用此成员函数,从 FTP 服务器获取文件,并将其存储在本地计算机上。

BOOL GetFile(
    LPCTSTR pstrRemoteFile,
    LPCTSTR pstrLocalFile,
    BOOL bFailIfExists = TRUE,
    DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL,
    DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
    DWORD_PTR dwContext = 1);

参数

pstrRemoteFile
指向以 NULL 结尾的字符串的指针,该字符串包含要从 FTP 服务器检索的文件名。

pstrLocalFile
指向以 NULL 结尾的字符串的指针,该字符串包含要在本地系统上创建的文件的名称。

bFailIfExists
指示文件名是否已被现有文件使用。 如果本地文件名已存在,并且此参数为 TRUE,则 GetFile 失败。 否则,GetFile 将清除文件的现有副本。

dwAttributes
指示文件的属性。 可以是以下 FILE_ATTRIBUTE_* 标志任何组合。

  • FILE_ATTRIBUTE_ARCHIVE 文件是存档文件。 应用程序使用此属性来标记要备份或删除的文件。

  • FILE_ATTRIBUTE_COMPRESSED 文件或目录已被压缩。 对于文件,压缩意味着文件中的所有数据都会压缩。 对于目录,压缩是新建文件和子目录的默认设置。

  • FILE_ATTRIBUTE_DIRECTORY 文件是一个目录。

  • FILE_ATTRIBUTE_NORMAL 文件没有设置其他属性。 此属性仅在单独使用时有效。 所有其他文件属性替代 FILE_ATTRIBUTE_NORMAL:

  • FILE_ATTRIBUTE_HIDDEN 文件被隐藏。 该文件不会包括在普通的目录列表中。

  • FILE_ATTRIBUTE_READONLY 文件是只读文件。 应用程序可以读取该文件,但无法写入或删除该文件。

  • FILE_ATTRIBUTE_SYSTEM 文件是操作系统的一部分,或者仅由操作系统使用。

  • FILE_ATTRIBUTE_TEMPORARY 文件用于临时存储。 只有绝对必要时,应用程序才应写入文件。 文件的大部分数据保留在内存中,而不会刷新到媒体,因为文件很快就会删除。

dwFlags
指定传输所依据的条件。 此参数可以是 Windows SDK 的 FtpGetFile 中所述的任何 dwFlags 值

dwContext
文件检索的上下文标识符。 有关 dwContext 的详细信息,请参阅“注解”

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

备注

GetFile 是一个高级例程,用于处理与从 FTP 服务器读取文件并在本地存储文件相关的所有开销。 仅检索文件数据或需要对文件传输进行密切控制的应用程序应改用 OpenFileCInternetFile::Read

如果 dwFlags 是 FILE_TRANSFER_TYPE_ASCII,则文件数据的转换也会将控制和格式化字符转换为 Windows 等效项。 默认传输是二进制模式,其中文件以与服务器上存储格式相同的格式下载。

pstrRemoteFile 和 pstrLocalFile 可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 GetFile 在使用目录名称分隔符之前先将其转换为适当的字符。

替代 dwContext 默认值,以将上下文标识符设置为所选值。 上下文标识符与其 CInternetSession 对象创建的 CFtpConnection 对象的这个特定操作相关联。 值返回到 CInternetSession::OnStatusCallback,以提供标识它的操作的状态。 有关上下文标识符的详细信息,请参阅 Internet 首要步骤:WinInet 一文。

CFtpConnection::OpenFile

调用此成员函数以打开位于 FTP 服务器上的文件进行读取或写入。

CInternetFile* OpenFile(
    LPCTSTR pstrFileName,
    DWORD dwAccess = GENERIC_READ,
    DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
    DWORD_PTR dwContext = 1);

参数

pstrFileName
一个指针,指向包含要打开文件的名称的字符串。

dwAccess
确定文件的访问方式。 可以是 GENERIC_READ 或 GENERIC_WRITE,但不能同时是两者。

dwFlags
指定后续传输所依据的条件。 可以是以下任一 FTP_TRANSFER_* 常量:

  • FTP_TRANSFER_TYPE_ASCII 文件传输使用 FTP ASCII (Type A) 传输方法。 将控件和格式设置信息转换为本地等效项。

  • FTP_TRANSFER_TYPE_BINARY 文件使用 FTP 的 Image (Type I) 传输方法传输数据。 文件完全按照其存在的方式传输数据,没有任何更改。 这是默认传输方法。

dwContext
用于打开文件的上下文标识符。 有关 dwContext 的详细信息,请参阅“注解”

返回值

指向 CInternetFile 对象的指针。

注解

OpenFile 应在以下情况下使用:

  • 应用程序具有需要在 FTP 服务器上作为文件发送和创建的数据,但该数据不在本地文件中。 OpenFile 打开文件后,应用程序使用 CInternetFile::Write 将 FTP 文件数据发送到服务器。

  • 应用程序必须从服务器检索文件并将其放入应用程序控制的内存中,而不是将其写入磁盘。 应用程序在使用 OpenFile 打开文件后使用 CInternetFile::Read

  • 应用程序需要对文件传输进行精细的控制。 例如,应用程序可能想要在下载文件时显示一个进度控件,以指示文件传输状态的进度。

在调用 OpenFile 之后以及调用 CInternetFile::Close 前,应用程序只能调用 CInternetFile::ReadCInternetFile::WriteCInternetConnection::CloseCFtpFileFind::FindFile。 对同一 FTP 会话的其他 FTP 函数的调用将失败,并会将错误代码设置为 FTP_ETRANSFER_IN_PROGRESS。

pstrFileName 参数可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 OpenFile 在使用之前将目录名称分隔符转换为适当的字符。

替代 dwContext 默认值,以将上下文标识符设置为所选值。 上下文标识符与其 CInternetSession 对象创建的 CFtpConnection 对象的这个特定操作相关联。 值返回到 CInternetSession::OnStatusCallback,以提供标识它的操作的状态。 有关上下文标识符的详细信息,请参阅 Internet 首要步骤:WinInet 一文。

CFtpConnection::PutFile

调用此成员函数,将文件存储在 FTP 服务器上。

BOOL PutFile(
    LPCTSTR pstrLocalFile,
    LPCTSTR pstrRemoteFile,
    DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
    DWORD_PTR dwContext = 1);

参数

pstrLocalFile
一个指针,指向包含要从本地系统发送的文件名称的字符串。

pstrRemoteFile
一个指针,指向包含要在 FTP 服务器上创建的文件名称的字符串。

dwFlags
指定文件传输发生的条件。 可以是 OpenFile 中描述的任何 FTP_TRANSFER_* 常量。

dwContext
用于放置文件的上下文标识符。 有关 dwContext 的详细信息,请参阅“注解”

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

备注

PutFile 是一个高级例程,用于处理与在 FTP 服务器上存储文件相关联的所有操作。 对于仅发送数据或需要更密切地控制文件传输的应用程序,应使用 OpenFileCInternetFile::Write

替代 dwContext 默认值,以将上下文标识符设置为所选值。 上下文标识符与其 CInternetSession 对象创建的 CFtpConnection 对象的这个特定操作相关联。 值返回到 CInternetSession::OnStatusCallback,以提供标识它的操作的状态。 有关上下文标识符的详细信息,请参阅 Internet 首要步骤:WinInet 一文。

CFtpConnection::Remove

调用此成员函数,从连接的服务器中删除指定的文件。

BOOL Remove(LPCTSTR pstrFileName);

参数

pstrFileName
一个指针,指向包含要删除文件的名称的字符串。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

备注

pstrFileName 参数可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 Remove 函数在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::RemoveDirectory

调用此成员函数,从连接的服务器中移除指定的目录。

BOOL RemoveDirectory(LPCTSTR pstrDirName);

参数

pstrDirName
一个指针,指向包含要移除的目录的字符串。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

注解

使用 GetCurrentDirectory 确定服务器的当前工作目录。 请勿假定远程系统已将你连接到根目录。

pstrDirName 参数可以是部分或完全限定的文件名(相对于当前目录)。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 RemoveDirectory 在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::Rename

调用此成员函数,重命名连接服务器上的指定文件。

BOOL Rename(
    LPCTSTR pstrExisting,
    LPCTSTR pstrNew);

参数

pstrExisting
一个指针,指向包含要重命名的文件名称的字符串。

pstrNew
指向包含文件的新名称的字符串的指针。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

注解

pstrExisting 和 pstrNew 参数可以是部分限定文件名(相对于当前目录)或完全限定文件名。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 Rename 在使用目录名称分隔符之前先将其转换为适当的字符。

CFtpConnection::SetCurrentDirectory

调用此成员函数,更改为 FTP 服务器上的其他目录。

BOOL SetCurrentDirectory(LPCTSTR pstrDirName);

参数

pstrDirName
指向包含目录名称的字符串的指针。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,可能会调用 Win32 函数 GetLastError 以确定错误原因。

备注

pstrDirName 参数可以是部分或完全限定的文件名(相对于当前目录)。 反斜杠 (\) 或正斜杠 (/) 可用作任一名称的目录分隔符。 SetCurrentDirectory 在使用目录名称分隔符之前先将其转换为适当的字符。

使用 GetCurrentDirectory 确定 FTP 服务器的当前工作目录。 请勿假定远程系统已将你连接到根目录。

另请参阅

CInternetConnection 类
层次结构图
CInternetConnection 类
CInternetSession 类