我希望将FTP服务器中的所有文件列入索引(主目录和子目录)。
如何获取服务器中可访问文件的完整列表?
答案 0 :(得分:8)
Indy有一个TIdFTP
组件,它具有List()
方法和DirectoryListing
属性。调用List()
,然后根据需要循环生成DirectoryListing
。 DirectoryListing
中的每个项目都会告诉您它是文件还是子文件夹。如果需要索引整个系统,则必须在每个子文件夹的递归循环中调用List()
。
要记住的事情 - 今天互联网上的FTP服务器仍然使用了数百种特定于平台的目录列表格式。原始FTP规范RFC 959中概述的LIST
命令没有定义任何用于列表的格式,因此系统可以自由地使用他们想要使用的任何内容,并且他们确实做到了多年来。 Windows和Unix格式很常见,但它们不是必需的。在MLSD
FTP扩展中RFC 3659之前未定义正式的列表格式,这取代了旧的LIST
命令(如果服务器TIdFTP.List()
确实使用了MLSD
支持它。)
我提到这一点是因为Indy 10中的TIdFTP
使用插件系统来支持许多这些不同的列表格式。每种格式都在Indy的单独IdFTPListParse...
单元中实现。默认情况下,始终只启用NLST
和MLSD
格式。对于您要支持的任何其他商家信息格式,您需要在IdFTPListParse...
子句中包含相应的uses
单元,以便TIdFTP
能够识别它。例如,IdFTPListParseUnix
和IdFTPListParseWindows
。或者,有一个IdAllFTPListParsers
单元,可以启用所有可用的解析器。当您调用TIdFTP.List()
时,TIdFTP.DirFormat
属性将设置为用于解析原始列表数据的解析器的名称。
答案 1 :(得分:1)
FTP协议记录在RFC 959中。列出文件的命令称为LIST
,如4.1.3节所述。