如何用D获取FTP上的文件列表?

时间:2015-01-25 15:53:53

标签: 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.addCommand("LIST");
    ftp.perform();
}

addCommand的问题,因为如果删除它App启动,显示FTP root dir然后退出。

确定。命令发出但如何得到它的结果? addCommand的类型为void。

P.S。我无法理解为什么在连接后立即退出?

3 个答案:

答案 0 :(得分:1)

尝试从" LIST"更改addCommand() (不是有效的FTP命令)到" LS"或" ls" (他们在某些网站上的表现不同)。

我不确定D的所有curl绑定 - 您通常可以通过调用perform()获得curl_getinfo()的结果。我知道D至少对这些具有约束力:

CURLcode  curl_easy_perform(CURL *curl);
CURLcode  curl_easy_getinfo(CURL *curl, CURLINFO info,...);

这可能是一个更好的选择,无论如何,取决于您的需求。

答案 1 :(得分:0)

问题在于ftp.perform,好的不是方法本身,因为frasnian说问题是LIST命令。但是,如果您在documentation上查看方法perform,则应将ThrowOnError throwOnError视为此方法的第一个参数。因此,您可以将其删除或放入try catch块。

但这仍然无法解决你的错误命令问题。

答案 2 :(得分:0)

正如其他人所说,LIST不是有效的FTP命令。您可以找到有效命令列表here

此外,在调用perform之前,您应该设置一个回调,以onReceive接收传入数据。该回调可以将结果累积到字符串或其他任何你想用它们做的事情。