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 句と組み合わせることができます

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

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 に答える
0

正規表現を使用して、ファイル名が[ドットと3つの数字]で終わるようにすることができます

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

またはそのようなもの

于 2014-02-10T21:21:31.847 に答える