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