升木 发表于 2015-11-6 09:47:45

WinInet中的FTP操作

  研究了一下Wininet在ftp中的应用,感觉比http应用要简单些。
  项目设置方面,Wininet.h和Wininet.lib都必须加入。
  假设ftp地址为10.1.1.1,账号和密码都为hello。
  为简单起见,使用同步模式:
  HINTERNET hInstance;
HINTERNET hConnect;
hInstance = InternetOpen(L"ftptest",
                        INTERNET_OPEN_TYPE_DIRECT,
                        NULL,
                        NULL,
                        0);
  if(hInstance == NULL)
{
return;
}
  hConnect = InternetConnect(hInstance,
             L"10.1.1.1",            //服务器地址
      INTERNET_DEFAULT_FTP_PORT,    //端口号 21
      L"hello",                  //账号
      L"hello",                  //密码
      INTERNET_SERVICE_FTP,
      0,
      0);
  if(hConnect == NULL)
{
InternetCloseHandle(hInstance);
  hInstance = NULL;
  return;
}
  如果hConnect返回非空,则表示连接成功了。
  hConnect句柄就非常有用了,可以通过FtpFindFirstFile和InternetFindNextFile来遍历目录和文件:
WIN32_FIND_DATA fd;
HINTERNET hFind = FtpFindFirstFile(g_hConnect, L"/*.*", &fd, INTERNET_FLAG_RELOAD, 0);
if(hFind != INVALID_HANDLE_VALUE)
{
BOOL bFind = TRUE;
  while(bFind)
{
bFind = InternetFindNextFile(hFind, &fd);
}
}
  InternetCloseHandle(hFind);
上面代码里面L"/"表示根目录,注意目录都是以反斜杠来划分的。目录和文件名都包含在fd参数里。
  如果要操作某个文件,可以使用FtpFileOpen,此函数返回的句柄,可用于InternetReadFile、InternetReadFileEx、InternetWrite和
  InternetSetFilePointer等函数,句柄用InternetCloseHandle来关闭。
  如果要从服务器复制一个文件到本地,则可使用一个更方便的函数FtpGetFile。而要上传一个文件,则使用FtpPutFile。
  Wininet库还提供了其他一些ftp操作函数,研究起来也比较简单。
             版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: WinInet中的FTP操作