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

Sha*_*eri 0 delphi ftp indy delphi-2010 indy10

我希望列出FTP服务器中的所有文件以进行索引(主目录和子目录).

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

Rem*_*eau 8

Indy有一个TIdFTP组件,它有一个List()方法和一个DirectoryListing属性.调用List()然后DirectoryListing根据需要循环遍历结果.DirectoryListing将在每个项目中告诉您它是文件还是子文件夹.如果需要索引整个系统,则必须List()为每个子文件夹调用一个递归循环.

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

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