如何使用D获取FTP上的文件列表?
我需要获取FTP上的文件列表。我写了下一个代码,但它在启动时崩溃了如何使用D获取FTP上的文件列表?,ftp,d,Ftp,D,我需要获取FTP上的文件列表。我写了下一个代码,但它在启动时崩溃了 void main() { string ftpserver = "myftpserver"; string ftplogin = "username"; string ftppass = "pass"; auto ftp = FTP(ftpserver); ftp.verbose(1); ftp.setAuthentication(ftplogin, ftppass); ftp.addComm
void main()
{
string ftpserver = "myftpserver";
string ftplogin = "username";
string ftppass = "pass";
auto ftp = FTP(ftpserver);
ftp.verbose(1);
ftp.setAuthentication(ftplogin, ftppass);
ftp.addCommand("LIST");
ftp.perform();
}
addCommand的问题,因为如果从应用程序开始删除它,请显示FTP根目录,然后退出
嗯。命令已发送,但如何获取其结果?addCommand的类型为void
另外,我不明白为什么连接后会立即退出?尝试将
addCommand()
从“LIST”(不是有效的FTP命令)更改为“LS”或“LS”(在某些站点上它们的行为不同)
我不确定curl
的所有D
绑定-您通常可以通过调用curl\u getinfo()
获得perform()
的结果。我知道D
至少有以下绑定:
CURLcode curl_easy_perform(CURL *curl);
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info,...);
无论如何,根据您的需要,哪一种可能是更好的选择。问题在于
ftp。执行,确定而不是方法本身,因为正如frasnian所说,问题在于LIST
命令。但如果您查看方法perform
,您应该将ThrowOnError ThrowOnError
作为此方法的第一个参数。因此,您可以将其设为nothrow或放入try catch
块中
但这仍然不能解决您的错误命令问题。正如其他人所建议的,LIST
不是有效的FTP命令。您可以找到有效命令的列表
另外,在调用perform
之前,您应该设置一个回调函数,该回调函数接收传入的数据。该回调可以将结果累积成字符串或任何您想对其执行的操作。旁注:ftp
是第70次调用的剩余内容。它不提供任何安全手段,对所有网络管理员来说都是一场噩梦。如果可能,尝试使用更现代的替代品:sftp
、scp
或ftps
,其中至少通信通道是加密的,但不是您的数据。我知道,但我需要从旧的愚蠢的FTP获取数据:(因此,您想在一个您认为已经过时的解决方案上投入更多的时间、精力和金钱?为什么不采取措施,并用一台更好的服务器并行发布内容?成本不高,允许逐步迁移并保护您的数据。@arkascha使用FTP的选择可能不在Suliman手中。他们是否应该使用FTP它,FTP支持在D标准库中,这是一个有效的问题。@MattKline当然这是一个有效的问题,我从来没有提出过其他要求!我只是做了一个旁注,仅此而已。我这样做是因为根据我的经验,跳出框框思考是非常值得的。很多时候,人们忘记了对现有情况提出问题,试图适应新情况改变这种情况更有意义。有时这确实是不可能的。但我发现更多时候是这样,而且通常比预期的要容易得多。你能告诉我如何使用委托或解释委托是如何工作的吗?我读过,但不确定它们在实际代码中应该如何工作…ftp.onReceive=(ubyte[]data){return data;};错误:函数std.net.curl.FTP.Protocol!()。onReceive(uint委托(ubyte[])回调)无法使用参数类型调用(ubyte[]函数(ubyte[]数据)pure nothrow@nogc@safe)怎么了?我尝试了list命令的各种变量。结果相同:<500未知命令。*未接受QUOT字符串:ls