如何列出FTP服务器中的所有文件?

时间:2012-12-03 18:09:49

标签: delphi ftp delphi-2010 indy indy10

我希望将FTP服务器中的所有文件列入索引(主目录和子目录)。

如何获取服务器中可访问文件的完整列表?

2 个答案:

答案 0 :(得分:8)

Indy有一个TIdFTP组件,它具有List()方法和DirectoryListing属性。调用List(),然后根据需要循环生成DirectoryListingDirectoryListing中的每个项目都会告诉您它是文件还是子文件夹。如果需要索引整个系统,则必须在每个子文件夹的递归循环中调用List()

要记住的事情 - 今天互联网上的FTP服务器仍然使用了数百种特定于平台的目录列表格式。原始FTP规范RFC 959中概述的LIST命令没有定义任何用于列表的格式,因此系统可以自由地使用他们想要使用的任何内容,并且他们确实做到了多年来。 Windows和Unix格式很常见,但它们不是必需的。在MLSD FTP扩展中RFC 3659之前未定义正式的列表格式,这取代了旧的LIST命令(如果服务器TIdFTP.List()确实使用了MLSD支持它。)

我提到这一点是因为Indy 10中的TIdFTP使用插件系统来支持许多这些不同的列表格式。每种格式都在Indy的单独IdFTPListParse...单元中实现。默认情况下,始终只启用NLSTMLSD格式。对于您要支持的任何其他商家信息格式,您需要在IdFTPListParse...子句中包含相应的uses单元,以便TIdFTP能够识别它。例如,IdFTPListParseUnixIdFTPListParseWindows。或者,有一个IdAllFTPListParsers单元,可以启用所有可用的解析器。当您调用TIdFTP.List()时,TIdFTP.DirFormat属性将设置为用于解析原始列表数据的解析器的名称。

答案 1 :(得分:1)

FTP协议记录在RFC 959中。列出文件的命令称为LIST,如4.1.3节所述。