0

我正在使用这段代码:

  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

有什么建议么?

4

3 回答 3

3

您可以将 Regex 表达式与 Linq 子句组合 Where

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)));

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

于 2014-02-10T21:26:05.310 回答
0

您可以使用正则表达式来确保文件名以 [点然后三个数字] 结尾

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

或类似的东西

于 2014-02-10T21:21:31.847 回答
0

尝试使用 LINQ:

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

于 2014-02-10T21:31:02.247 回答