2012-11-16 27 views
0

的輸出,我可以看到,有兩種類型的響應:解析的FtpWebRequest

  1. 的Windows
  2. 的Unix

例子

"08-25-12 06:52AM   139874418 3.03.06P13.12NB.rar" 
"-r-xr-xr-x 1 owner group    1 Jun 3 1999 NotCurrentYear.txt" 

我需要解析它,我使用了以下邏輯:

AnalyzedFolder folderToBeAnalyzed = new AnalyzedFolder(); 
       folderToBeAnalyzed.Name = folder; 
       Job.AnalyzedFolders.Add(folderToBeAnalyzed); 


       FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textBoxFTPSite.Text + folder); 
       request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
       request.Credentials = new NetworkCredential(textBoxFTPUserName.Text, textBoxFTPPassword.Text); 

       FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 


       Stream responseStream = response.GetResponseStream(); 
       StreamReader reader = new StreamReader(responseStream); 


       string[] outputlines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
       foreach (string info in outputlines) 
       { 
        var tokens = info.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

        string name; 
        string type; 
        string size; 
        DateTime dateModified; 
        string lsLine; 

        if (tokens.Length == 4) //WINDOWS 
        { 
         name = tokens[3]; 
         if (tokens[2] == "<DIR>") 
         { 
          type = "D"; 
          size = ""; 
         } 
         else 
         { 
          type = "F"; 
          size = tokens[2]; 
         } 
         dateModified = DateTime.ParseExact(tokens[0] + " " + tokens[1], "MM-dd-yy h:mmtt", CultureInfo.InvariantCulture); 
         lsLine = info; 
         FTPFolderEntity entity = new FTPFolderEntity() { FolderName = folder, Name = name, Type = type, Size = size, DateModified = dateModified, LSLine = lsLine }; 
         folderToBeAnalyzed.Entities.Add(entity); 
        } 
        else //UNIX 
        { 
        } 
       } 

的問題是,這個文件:

"11-15-12 10:02PM     324 Copy (10) of 1040.txt.zip" 

因爲空間,邏輯失敗。而且,像這個bug一樣,我懷疑我也可能遇到其他問題。任何人都可以指導我一個更好的解析方法嗎?

回答

0

您可以使用正則表達式這裏刪除多餘Whitesapces

string info = "11-15-12 10:02PM     324 Copy (10) of 1040.txt.zip"; 
string result = Regex.Replace(info, @"\s\s+", " "); 

後,你會得到result作爲

// result = "11-15-12 10:02PM 324 Copy (10) of 1040.txt.zip"; 

ADDED,如果你想限制您的令牌假設第一個始終是日期,第二個是時間,其餘是您的fileName或其他東西:

var tokens = Regex.Split(info, @"\s+"); 

var newTokens = new string[] 
{ 
    tokens[0], 
    tokens[1], 
    tokens[2], 
    tokens[3] + ' ' + tokens[4] + ' ' + tokens[5] + ' ' + tokens[6] 
}; 
+0

它很好,但它仍然會給出7個標記,我的邏輯會失敗。除了計算令牌之外,還有什麼更好的想法? –

+0

你想要多少令牌?由於問題並不清楚,所以我想你想刪除多餘的空格。 –

0

您可以使用Regex進行拆分。

var tokens = Regex.Split(info, @"\s+");