C++ C++;FTP WinINet,can';t从FTP服务器下载文件夹
我试图下载名为“public_html”的文件夹,但它在我的程序中没有任何作用,这是我的代码C++ C++;FTP WinINet,can';t从FTP服务器下载文件夹,c++,ftp,wininet,C++,Ftp,Wininet,我试图下载名为“public_html”的文件夹,但它在我的程序中没有任何作用,这是我的代码 int main(){ cerr<<"Hello"<<endl; string spath = "C:/Users/"+GetUser()+"/Desktop"; spath += str; LPCSTR path = spath.c_str(); HINTERNET hInternet = InternetOpen(NULL, INTER
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;
}
这是处理倾向于抽象底层原则的库或API时的问题:您最终无法理解机器上真正发生的事情,也无法轻松确定要用于什么目的的函数 要回答这个问题,您必须后退一步,看看FTP本身 您使用的函数称为
FtpGetFile
,而不是FtpGetFolder
。FTP本身代表文件传输协议
无论您使用的库有多棒,您都不能告诉FTP服务器您的客户端希望它提供一个完整的文件夹供下载。一次只能下载一个文件。因此,解决方案是请求该文件夹中的文件列表,然后编写一个函数遍历响应并下载每个文件,根据需要递归以处理嵌套的文件夹/目录。因为FTP不是这样工作的。@MahmoudAl Qudsi,你可以解释为什么或我做错了什么,或者如何修复它因为这不是我们的计划。您必须输入目录并手动递归获取所有文件。如何获取我输入的目录中所有文件和目录的列表?我肯定有。
LPCSTR str = "/public_html";