我想列出 FTP 服务器中的所有文件以进行索引(主目录和子目录)。
如何获取服务器中可访问文件的完整列表?
Indy 有一个TIdFTP
组件,它有一个List()
方法和一个DirectoryListing
属性。调用List()
然后DirectoryListing
根据需要循环遍历结果。中的每个项目DirectoryListing
都会告诉您它是文件还是子文件夹。如果您需要索引整个系统,则必须List()
为每个子文件夹调用递归循环。
需要牢记的一点 - 当今 Internet 上的 FTP 服务器仍在使用数百种特定于平台的目录列表格式。LIST
原始 FTP 规范RFC 959中概述的命令没有定义用于列表的任何格式,因此系统可以自由使用它们想要使用的任何东西,并且多年来他们确实这样做了。Windows 和 Unix 格式很常见,但不是必需的。直到RFC 3659在 FTP 的扩展中才定义正式的列表格式MLSD
,它替换了旧LIST
命令(如果服务器支持它,TIdFTP.List()
则使用它)。MLSD
我提到这一点是因为TIdFTP
Indy 10 使用插件系统来支持许多不同的列表格式。IdFTPListParse...
在 Indy中,每种格式都在一个单独的单元中实现。默认情况下,只有NLST
和MLSD
格式始终处于启用状态。对于您想要支持的任何其他列表格式,您需要在子句中包含适当的IdFTPListParse...
单位以便识别它。例如,和。或者,有一个单元可以启用所有可用的解析器。当您调用 时,该属性将设置为用于解析原始列表数据的解析器的名称。uses
TIdFTP
IdFTPListParseUnix
IdFTPListParseWindows
IdAllFTPListParsers
TIdFTP.List()
TIdFTP.DirFormat
FTP 协议记录在RFC 959中。列出文件的命令被调用LIST
,如第 4.1.3 节所述。