0

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

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

4

2 回答 2

8

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

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

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

于 2012-12-03T20:44:15.107 回答
1

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

于 2012-12-03T18:17:02.703 回答