zoukankan      html  css  js  c++  java
  • 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操作函数,研究起来也比较简单。

  • 相关阅读:
    Java开发中RMI和webservice区别和应用领域
    Restful与webService区别
    从航空看创新(厚积而薄发,必须要研究掌握并且熟练前人已经研究出的东西,才能谈得上创新)
    MM常用的双关语(男士必读)
    C++调用C#库简单例程
    解密Arm中国:全球最具影响力的芯片公司中国布局浮出水面
    什么是 C 和 C ++ 标准库?
    net core (下)
    NET Core断点续传
    scikit-learn 为机器学习
  • 原文地址:https://www.cnblogs.com/fengju/p/6173540.html
Copyright © 2011-2022 走看看