2014-02-10 29 views
0

我使用此代碼的列表:獲得目錄中3個擴展名的文件,只有數字

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 

有什麼建議?

+1

這是不可能的使用簡單的'searchPattern'參數。你可以爲這個tho寫一個快速RegularExpression。像這樣:'/^.+ \。[0-9] {3} $ /' – Diamondo25

+0

+1 @ Diamondo25 [搜索模式通配符](http://msdn.microsoft.com/zh-cn/library/ms143316 (v = vs.110).aspx#remarksToggle)嘗試獲取所有文件,然後使用linq和Regex表達式進行篩選。 – Xenolightning

回答

3

你可以一個正則表達式表達一個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))); 

請注意,我用EnumerateFiles將您的調用替換爲GetFiles。此方法允許在讀取整個目錄列表之前開始枚舉集合。所以,EnumerateFiles(如果目錄中有很多文件)可能會更有效率。

+0

這仍然給了我WEBTRN25.000_copy,但我用'Path.GetExtension(listitem).Length == 4'檢查了擴展的長度,並且組合起作用了。 – ErocM

+0

請刷新答案,我已經更新了RegEx的模式。原始模式不考慮GetExtension() – Steve

+0

完美返回的擴展前面的點,這工作 ! tyvm! – ErocM

0

,你可以使用正則表達式以確保文件名[點,然後三個號碼]結束

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

或類似的東西

0

嘗試使用LINQ:

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

相關問題