2012-12-03 88 views

回答

8

Indy有一個TIdFTP組件,它有一個List()方法和一個DirectoryListing屬性。請致電List(),然後根據需要循環產生的DirectoryListingDirectoryListing中的每個項目都會告訴你它是一個文件還是一個子文件夾。如果您需要索引整個系統,則必須在每個子文件夾的遞歸循環中調用List()

需要注意的是,目前互聯網上的FTP服務器仍然使用數百種平臺特定的目錄列表格式。原始FTP規範RFC 959中列出的LIST命令沒有定義任何要用於列表的格式,因此係統可以隨意使用他們想使用的任何內容,而且他們多年來一直這樣做。 Windows和Unix格式很常見,但它們不是必需的。到RFC 3659MLSD擴展名爲FTP,取代舊的LIST命令(TIdFTP.List()確實使用MLSD,如果服務器支持它),則沒有定義正式的列表格式。

我提到這是因爲Indy 10中的TIdFTP使用插件系統來支持許多這些不同的列表格式。每種格式在Indy單獨執行IdFTPListParse...單元。默認情況下,只有NLSTMLSD格式始終處於啓用狀態。對於您要支持的任何其他列表格式,您需要在uses子句中包含適當的IdFTPListParse...單元,以便TIdFTP識別它。例如,IdFTPListParseUnixIdFTPListParseWindows。或者,有一個IdAllFTPListParsers單元可啓用所有可用的解析器。當您致電TIdFTP.List()時,TIdFTP.DirFormat屬性將設置爲用於解析原始列表數據的解析器的名稱。

+0

非常好的音符,thanx Remy。 –

1

FTP協議記錄在RFC 959。列出文件的命令稱爲LIST,如4.1.3節所述。

+0

我不確定LIST命令可以列出所有子目錄!!! –

+0

當然可以。它在子目錄中也同樣適用。 –

+0

@DavidHeffernan,它只能列出當前的dirrectory。在這種情況下,我想編寫一個可以列出所有目錄的函數。例如ftp中的List命令與Windows命令提示符中的「dir」命令相同,我想編寫一個類似「dir/s」的函數來查找ftp中的所有子目錄。 –

相關問題