获取目录中3个扩展名和仅数字的文件列表

时间:2014-02-10 21:16:16

标签: c# getfiles

我正在使用此代码:

  var list = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, _globalSetting.CompanyCode + "trn*.???", SearchOption.TopDirectoryOnly).ToList();

  foreach (var listitem in list)
  {
    listBox_Files.Items.Add(Path.GetFileName(listitem));
  }

但它给了我超过我的需要。我希望它只给我3个扩展名的文件,如果可以的话,只有那些带有数字的文件。我试过了???上面但它给了我这个:

WEBTRN25.000
WEBTRN25.001
WEBTRN25.000_copy
WEBTRN34.ABC

我也尝试了###但是没有给我任何结果。

这是我希望它回馈的内容:

WEBTRN25.000
WEBTRN25.001

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您可以将Regex表达式与Linq子句组合在哪里

Regex r = new Regex(@"^\.\d\d\d$");
var list = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, 
                               _globalSetting.CompanyCode + "trn*.*", 
                               SearchOption.TopDirectoryOnly)
                               .Where(x => r.IsMatch(Path.GetExtension(x)));

请注意,我已使用EnumerateFiles替换了对GetFiles的调用。此方法允许在读取整个目录列表之前启动集合的枚举。因此,EnumerateFiles(如果目录中有许多文件)可能更有效。

答案 1 :(得分:0)

您可以使用正则表达式来确保文件名以[dot then three numbers]

结尾
.*\\.[0-9]{3}$

或类似的东西

答案 2 :(得分:0)

尝试使用LINQ:

var list = Directory.GetFiles("<DIRECTORY>").Where(a=> Regex.IsMatch(a, @"\d\d\d")).ToList().Foreach((b)=> Path.GetFileName(b));。你不需要foreach循环