CFtpFileFind 类

辅助 FTP 服务器的 Internet 文件搜索。

语法

class CFtpFileFind : public CFileFind

成员

公共构造函数

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

公共方法

名称 描述
CFtpFileFind::FindFile 在 FTP 服务器上查找文件。
CFtpFileFind::FindNextFile 从上一次对 FindFile 的调用继续文件搜索。
CFtpFileFind::GetFileURL 获取所找到文件的 URL,包括路径。

备注

CFtpFileFind 包括用于启动搜索、查找文件以及返回 URL 或其他有关该文件的描述性信息的成员函数。

为 Internet 和搜索到的本地文件设计的其他 MFC 类包括 CGopherFileFindCFileFind。 这些类与 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;
}

继承层次结构

CObject

CFileFind

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 类