天天看點

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操作函數,研究起來也比較簡單。