2013-08-29 264 views
-1

我試圖下載名爲「public_html」的文件夾,但它沒有在我的程序中做任何事情,這裏是我的代碼。C++ FTP WinINet,無法從FTP服務器下載文件夾

int main(){ 
    cerr<<"Hello"<<endl; 
    string spath = "C:/Users/"+GetUser()+"/Desktop"; 
    spath += str; 
    LPCSTR path = spath.c_str(); 
    HINTERNET hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); // Initialization for WinInet Functions 
    if (!hInternet) { cerr<<"error code is "<<GetLastError()<<"\n"; 
     system("pause"); 
     return 1; } 

    // Starts a session in this case an FTP session 
    HINTERNET hFtpSession = InternetConnect(hInternet,IP,INTERNET_DEFAULT_FTP_PORT,User,Pass, INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0); 
    if(!hFtpSession) { 
     InternetCloseHandle(hInternet); 
     cerr<<"error code is "<<GetLastError()<<"\n"; 
     system("pause"); 
     return 2; 
    } 

    FtpGetFile(hFtpSession, str, path, false, NULL, FTP_TRANSFER_TYPE_BINARY, NULL); 
    // Uploads the file C:\\Test.txt onto the FTP server as Test.txt 

    InternetCloseHandle(hFtpSession); // Close hFtpSession 
    InternetCloseHandle(hInternet); // Close hInternet 
    return 0; 
} 

這個工程,當我一次下載單個文件,但不是當我做它與文件夾。爲什麼不?你最終沒有理解什麼是真正發生的事情你的機器上,並不能很容易地確定哪些功能:BTW

LPCSTR str = "/public_html"; 
+0

因爲這不是FTP的工作原理。 –

+1

@ MahmoudAl-Qudsi不只是這麼說,你可以解釋我爲什麼或什麼做錯了,或者如何解決它。 : – user2635579

+0

因爲它不是[FTP標準](http://www.ietf.org/rfc/rfc959.txt)的一部分。您必須輸入目錄並手動遞歸獲取所有文件。 –

回答

3

這與傾向於抽象的基本原則庫或API打交道時的問題用於什麼目的。

要回答這個問題,你必須退後一步,看看FTP本身。

您使用的功能被稱爲FtpGetFile而不是FtpGetFolder。 FTP本身代表文件傳輸協議。

無論您使用的是圖書館如何真棒,你不能告訴你的客戶想要它,給它一個完整的文件夾下載一個FTP服務器。一次只能下載一個文件。因此,解決方案是請求該文件夾中的文件列表,然後編寫函數遍歷響應並下載每個單獨的文件,按需遞歸以處理嵌套的文件夾/目錄。