2009-12-16 70 views
0

我試圖通過C#代碼連接到FTP服務器,並且獲取文件和目錄的列表。而且我保存在一個ArrayList中(具有所有屬性)。我可以通過SYS ftp命令找到FTP服務器類型。我有一個基於UNIX的文件的正則表達式來解析文件\目錄屬性。但我沒有表達Windows FTP服務器文件解析。我需要幫助。解析Windows FTP服務器的文件詳細信息

04-30-09 10:40AM  <DIR>   Acrobat 
12-08-09 10:36PM     9058 AuthCheck.zip 
12-06-09 12:49PM     174 desktop.ini 
11-09-09 03:33PM  <DIR>   FailedPDF 

我需要解析這些。日期,時間,目錄\文件,文件名稱

請幫忙。謝謝。

回答

0

我不知道很多關於C#,但如果你只需要一個正則表達式試試這個:

^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+([\w<>]*)\s+(\d*)\s+([\w\._\-]+)\s*$

$ 1 =日期,$ 2 =時間,$ 3 =上午或下午,$ 4 =類型(可以爲空),5 $ =尺寸(空如果DIR),$ 6 =名

或IFF $ 4是僅或空

^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+(<DIR>)?\s+(\d*)\s+([\w\._\-]+)\s*$

我想, 「<」 和 「>」 是在C#沒有特殊字符

+0

$ 4 =類型(可能爲空), 這裏似乎是問題。在dir的情況下,我越來越'>' 請重新檢查它。 – marshalprince 2009-12-16 07:28:44

+1

好吧,也許C#需要([\ W <>] +)*,我的意圖是:也許可能有不同於「

」,所以如果只有出現或不會被替換()? (? - >可選意味着零或一個) – 2009-12-16 09:33:49

0
^(\d{2}-\d{2}-\d{2}\s*\d{2}:\d{2}(A|P)M)\s*(<DIR>){0,1}\s*(\d*)\s*(\w)\s*$ 

捕獲組: 0:日期時間 1:DIR 2:文件大小(或空的目錄) 3:名稱

我沒有編譯器方便,所以我不能測試,但它應該足夠接近開始。

+0

正則表達式的正則表達式=新的Regex(@「^(\ d {2} - \ d {2} - \ d {2} \ s * \ d {2}(A | P)M)\ s *(

){0,1} \ s *(\ d *)\ s *(\ w)\ s * $「,RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); 匹配匹配= regex.Match(filedetail); 這裏匹配返回null。 – marshalprince 2009-12-16 07:11:19

0

看起來線條有固定的結構。所以,你可以簡單地這樣做:

Date fileDate; 
bool isDir; 
int fileSize; 
string fileName; 

fileDate=line.Substring(0,18).ParseExact("MM-dd-yy hh-sstt"); 
isDir=line.Substring(24,5)=="DIR"; 
if (!isDir) 
{ 
    fileSize=int.Parse(line.Substring(29,10).Trim()); 
} 
fileName=line.Substring(39); 
相關問題