2010-01-05 20 views
1

我有一個簡單的問題。我的(Delphi 2007 with Indy 9)應用程序連接到FTP服務器以檢索文件列表。 (NLST,而不是LIST)然後我分別下載每個文件進行進一步處理。如何從文件夾中分離文件?

不幸的是,FTP站點的管理員在文件所在的文件夾中添加了一個子文件夾。當前的代碼認爲它是一個文件,因此它會嘗試下載它。當然,這失敗了。現在,我只是通過檢查過程是否成功來解決它,如果不成功,它會向錯誤日誌中添加一條消息,但它也會繼續處理其他文件。

但我想要做的是添加一些代碼,它將首先檢查文件列表中的名稱是文件名還是文件夾名。最簡單的方法是什麼?

注意:我不能依靠LIST方法返回帶有附加屬性的文件列表,因爲我連接到可以全部定義它們自己的文件格式的多個FTP服務器。此外,解析這樣的列表並不是一件容易的事情,即使我可以確定FTP服務器返回哪種列表。更糟糕的是,一些文件名只是沒有擴展名的數字,所以通配符也沒有幫助。

+0

在這裏不是一個Delphi特有的建議,但也許你可以加載文件列表到一個數組中有兩個字段,文件名和一個標記字段來表明它是一個文件還是一個文件夾,或者一個布爾值來指示它是一個文件或不是?還有什麼是文件夾名稱的本質,我的意思是如果他們是阿爾法而不是數字,你可能可以過濾只是數字,以確保您只抓取文件? – 2010-01-05 14:24:53

+0

文件和文件夾名稱可以是任何東西。沒有具體的方案。我的代碼只查看特定文件夾中的文件,但該文件夾可能包含類似於文件名的子文件夾。我無法控制管理員放入FTP文件夾的內容。我也無法控制FTP服務器。 – 2010-01-05 14:38:52

回答

2

NLST命令沒有提供任何有關它提供的名稱的詳細信息。您必須使用LIST或MLSD/MLST命令來獲取詳細信息,以便區分不同的項目類型。是的,在使用LIST時,有許多不同的格式在線使用,您必須根據需要手動檢測和解碼它們(例如,Indy 10中的TIdFTP組件具有幾十個分析程序,可用於此目的)。這就是MLST/MLST擴展被髮明的原因。它專門設計爲具有統一的格式,無需任何猜測即可輕鬆在代碼中進行分析。許多現代的FTP服務器都支持該擴展。

+0

不幸的是,我連接的一些FTP服務器有點舊,不支持MLST。升級到Indy 10可能會起作用,但尚未完成,因爲當前代碼取決於幾種不支持或不支持的Indy 9功能。到目前爲止,這似乎是最好的解決方案,但... – 2010-01-06 08:36:18

+0

Indy 9需要哪些功能在Indy 10中不起作用? – 2010-01-06 20:32:20

+0

它們並不是真的缺失,但有很多代碼需要重構,然後用Indy 10再次測試。我們可以修復它,但這需要時間。我試圖保持在爲項目分配的預算範圍內。 :-) – 2010-01-06 21:18:50

相關問題