CFtpFileFind 类
辅助 FTP 服务器的 Internet 文件搜索。
语法
class CFtpFileFind : public CFileFind
成员
公共构造函数
名称 | 描述 |
---|---|
CFtpFileFind::CFtpFileFind | 构造 CFtpFileFind 对象。 |
公共方法
名称 | 描述 |
---|---|
CFtpFileFind::FindFile | 在 FTP 服务器上查找文件。 |
CFtpFileFind::FindNextFile | 从上一次对 FindFile 的调用继续文件搜索。 |
CFtpFileFind::GetFileURL | 获取所找到文件的 URL,包括路径。 |
备注
CFtpFileFind
包括用于启动搜索、查找文件以及返回 URL 或其他有关该文件的描述性信息的成员函数。
为 Internet 和搜索到的本地文件设计的其他 MFC 类包括 CGopherFileFind 和 CFileFind。 这些类与 CFtpFileFind
一起,共同为客户端提供了一种无缝机制,用于查找特定文件,无需考虑服务器协议或文件类型(不管是在本地计算机上还是在远程服务器上)。 没有用于在 HTTP 服务器上搜索的 MFC 类,因为 HTTP 不支持进行搜索所需的直接文件操作。
有关如何使用 CFtpFileFind
和其他 WinInet 类的详细信息,请参阅使用 WinInet 进行 Internet 编程一文。
示例
以下代码演示如何枚举 FTP 服务器的当前目录中的所有文件。
// create a session object to initialize WININET library
// Default parameters mean the access method in the registry
// (that is, set by the "Internet" icon in the Control Panel)
// will be used.
CInternetSession sess(_T("My FTP Session"));
CFtpConnection *pConnect = NULL;
try
{
// Request a connection to ftp.microsoft.com. Default
// parameters mean that we'll try with username = ANONYMOUS
// and password set to the machine name @ domain name
pConnect = sess.GetFtpConnection(_T("ftp.microsoft.com"));
// use a file find object to enumerate files
CFtpFileFind finder(pConnect);
// start looping
BOOL bWorking = finder.FindFile(_T("*"));
while (bWorking)
{
bWorking = finder.FindNextFile();
_tprintf_s(_T("%s\n"), (LPCTSTR)finder.GetFileURL());
}
}
catch (CInternetException *pEx)
{
TCHAR sz[1024];
pEx->GetErrorMessage(sz, 1024);
_tprintf_s(_T("ERROR! %s\n"), sz);
pEx->Delete();
}
// if the connection is open, close it
if (pConnect != NULL)
{
pConnect->Close();
delete pConnect;
}
继承层次结构
CFtpFileFind
要求
标头:afxinet.h
CFtpFileFind::CFtpFileFind
调用此成员函数来构造 CFtpFileFind
对象。
explicit CFtpFileFind(
CFtpConnection* pConnection,
DWORD_PTR dwContext = 1);
参数
pConnection
一个指向 CFtpConnection
对象的指针。 可以通过调用 CInternetSession::GetFtpConnection 来获取 FTP 连接。
dwContext
CFtpFileFind
对象的上下文标识符。 有关详细信息,请参阅以下注解。
备注
MFC 将 dwContext 的默认值从创建 CFtpFileFind
对象的 CInternetSession 对象发送到 CFtpFileFind
对象。 你可以替代默认值,以将上下文标识符设置为所选值。 上下文标识符将返回到 CInternetSession::OnStatusCallback,以提供标识它时使用的对象的状态。 有关上下文标识符的详细信息,请参阅 Internet 首要步骤:WinInet 一文。
示例
请参阅本主题前面的类概述中的示例。
CFtpFileFind::FindFile
调用此成员函数以查找 FTP 文件。
virtual BOOL FindFile(
LPCTSTR pstrName = NULL,
DWORD dwFlags = INTERNET_FLAG_RELOAD);
参数
pstrName
一个指针,指向包含要查找文件的名称的字符串。 如果为 NULL,则调用将执行通配符搜索 (*)。
dwFlags
描述如何处理此会话的标志。 这些标志可以与按位或运算符 (|
) 组合使用,如下所示:
INTERNET_FLAG_RELOAD
即使数据是本地缓存的,也可以从网络中获取数据。 这是默认标志。INTERNET_FLAG_DONT_CACHE
:不要在本地或任何网关中缓存数据。INTERNET_FLAG_RAW_DATA
:替代默认值以返回原始数据(FTP 的 WIN32_FIND_DATA 结构)。INTERNET_FLAG_SECURE
:通过安全套接字层或 PCT 保护网络上的事务。 此标志仅适用于 HTTP 请求。INTERNET_FLAG_EXISTING_CONNECT
:如果可能,为新FindFile
请求重用与服务器的现有连接,而不是为每个请求创建一个新会话。
返回值
如果成功,则不为 0;否则为 0。 若要获得扩展的错误信息,请调用 Win32 函数 GetLastError。
备注
调用 FindFile
以检索第一个 FTP 文件后,可以调用 FindNextFile 来检索后续 FTP 文件。
示例
请参阅本主题中的较早的示例。
CFtpFileFind::FindNextFile
调用此成员函数以从对 FindFile 成员函数的调用开始继续文件搜索。
virtual BOOL FindNextFile();
返回值
如果有更多文件,则为非零值;如果找到的文件是目录中的最后一个文件或发生错误,则为零。 若要获得扩展的错误信息,请调用 Win32 函数 GetLastError。 如果找到的文件是目录中的最后一个文件,或者找不到匹配的文件,GetLastError
函数便返回 ERROR_NO_MORE_FILES。
备注
调用任何特性函数之前,必须至少调用一次此函数(请参阅 CFileFind::FindNextFile)。
FindNextFile
包装 Win32 函数 FindNextFile。
示例
请参阅本主题前面部分的示例。
CFtpFileFind::GetFileURL
调用此成员函数以获取指定文件的 URL。
CString GetFileURL() const;
返回值
统一资源定位器 (URL) 的文件和路径。
备注
GetFileURL
类似于成员函数 CFileFind::GetFilePath,只不过它以 URL 格式提供结果。 与 CFileFind::GetFilePath
一样,结果不包括文件名。 例如,位于 //moose/dir/file1.txt:
中的 file1.txt
返回 ftp://moose/dir/
。
另请参阅
CFileFind 类
层次结构图
CGopherFileFind 类
CInternetFile 类
CGopherFile 类
CHttpFile 类