如何在C#中根据文件名格式过滤文件

时间:2014-08-08 20:57:10

标签: c# xml

我需要使用某种文件名格式从FTP服务器下载文件。服务器中的文件名可能如下所示:

  1. O形0098-00009801_08052014054258.xml
  2. 订单ID 3359_08062014121815.xml
  3. O形0302-00022043_07312014085513.xml
  4. O形LABELS_94920235569876.XML
  5. JO ANN_08062014170911.xml
  6. O形0233-00026378_07312014155245.xml
  7. LABELS_08052014174907.xml
  8. 如果名称格式为O-XXXX-XXXXXXXX_XXXXXXXXXXXXXXXX,我只想下载文件

    我使用的是以下代码,但效果不是很好。仅选择上述文件名格式的文件最有效的方法是什么?

    using (Stream responseStream = response.GetResponseStream())
    {
        using (StreamReader reader = new StreamReader(responseStream))
        {
            while (!reader.EndOfStream)
            {
                fileName = reader.ReadLine();
                if (fileName.ToUpper().IndexOf("O-") > -1)
                    files.Add(fileName);
            }
        }
    }
    

    结果是只选择这些文件:

    1. O形0098-00009801_08052014054258.xml
    2. O形0233-00026378_07312014155245.xml
    3. O形0302-00022043_07312014085513.xml

2 个答案:

答案 0 :(得分:3)

假设您已将文件列表存储在List<string>中,则提取很简单

List<string> files = new List<string>()
{
    "O-0098-00009801_08052014054258.xml",
    "ORDER ID 3359_08062014121815.xml",
    "O-0302-00022043_07312014085513.xml",
    "O-LABELS_94920235569876.XML",
    "JO ANN_08062014170911.xml",
    "O-0233-00026378_07312014155245.xml",
    "LABELS_08052014174907.xml"
};

Regex r = new Regex(@"O-\d{4}-\d{8}_\d{14}");
var result = files.Where(x => r.IsMatch(x)).ToList();

答案 1 :(得分:0)

你可能只是这样做:

List<string> orders = new List<string>()
{
    "O-0098-00009801_08052014054258.xml",
    "ORDER ID 3359_08062014121815.xml",
    "O-0302-00022043_07312014085513.xml",
    "O-LABELS_94920235569876.XML",
    "JO ANN_08062014170911.xml",
    "O-0233-00026378_07312014155245.xml",
    "LABELS_08052014174907.xml"
};

List<string> valid = new List<string>()
{
    "O-0098-00009801_08052014054258.xml",
    "O-0302-00022043_07312014085513.xml",
    "O-0233-00026378_07312014155245.xml"
};

List<string> order = orders.Where(x => valid.Contains(x)).ToList();

如果你有List有效/总数,你可以用上述方式完成。否则你可以使用史蒂夫回答的正则表达式。