C ++ FTP WinINet,无法从FTP服务器下载文件夹
Posted
技术标签:
【中文标题】C ++ FTP WinINet,无法从FTP服务器下载文件夹【英文标题】:C++ FTP WinINet, can't download folder from FTP server 【发布时间】:2013-08-29 07:02:49 【问题描述】:我正在尝试下载名为“public_html”的文件夹,但它在我的程序中没有执行任何操作,这是我的代码。
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;
这在我一次下载单个文件时有效,但在我使用文件夹时无效。为什么不?顺便说一句
LPCSTR str = "/public_html";
【问题讨论】:
因为 FTP 不是这样工作的。 @MahmoudAl-Qudsi 您可以解释为什么或我做错了什么,或者如何解决它。 : 因为它不是FTP standard 的一部分。您必须进入目录并手动递归获取所有文件。 如何获取我输入的目录中所有文件和目录的列表? 我确定有functions for that。 【参考方案1】:这是处理倾向于抽象基本原理的库或 API 时的问题:您最终不了解您的机器上真正发生的事情,并且无法轻松确定将哪些函数用于什么目的。
要回答这个问题,你必须退后一步,看看 FTP 本身。
您使用的函数称为FtpGetFile
而不是 FtpGetFolder
。 FTP 本身代表 file 传输协议。
无论您使用的库多么棒,您都无法告诉 FTP 服务器 您的客户端希望它给它一个完整的文件夹 来下载。您一次只能下载一个文件。因此解决方案是请求该文件夹中的文件列表,然后编写一个函数来遍历响应并下载每个单独的文件,根据需要递归以处理嵌套的文件夹/目录。
【讨论】:
以上是关于C ++ FTP WinINet,无法从FTP服务器下载文件夹的主要内容,如果未能解决你的问题,请参考以下文章
如果防火墙在 Word 模板 VBA 中使用 wininet.dll,则无法从 FTP 下载文件
使用 wininet.dll api 从 FTP 站点搜索和检索文件名