【问题标题】:Parsing the output of FtpWebRequest解析 FtpWebRequest 的输出
【发布时间】:2012-11-16 04:58:41
【问题描述】:

我可以看到有两种类型的响应:

  1. 窗口
  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"

由于空格,逻辑失败。另外,就像这个错误一样,我怀疑我也可能遇到其他问题。谁能指导我更好的解析方法?

【问题讨论】:

    标签: c# ftp ftpwebrequest


    【解决方案1】:

    您可以在此处使用正则表达式来删除多余的Whitesapces

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

    之后你会得到result as

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

    添加,如果您想限制您的令牌,假设第一个始终是日期,第二个是时间,其余是您的文件名或其他内容:

    var tokens = Regex.Split(info, @"\s+");
    
    var newTokens = new string[] 
    { 
        tokens[0], 
        tokens[1], 
        tokens[2],
        tokens[3] + ' ' + tokens[4] + ' ' + tokens[5] + ' ' + tokens[6]
    };
    

    【讨论】:

    • 它很好,但它仍然会给出 7 个令牌,我的逻辑会失败。有比只计算令牌更好的主意吗?
    • 你想要多少个令牌?由于问题不清楚,所以我认为您想删除多余的空格。
    【解决方案2】:

    您可以使用Regex 进行拆分。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2020-12-17
      • 2019-01-22
      • 2014-10-19
      • 2013-02-03
      相关资源
      最近更新 更多