2016-11-24 99 views
-4

我有一個與startswith的小問題。StartsWith不返回true

string[] MatchedFiles = Directory 
    .GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
    .Where(s => s.StartsWith(this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 

我需要篩選更多的文件,但它甚至不能使用一個。數組總是空的!但是,它適用於包含?

我試過所有的字符串比較。

有人可以解釋我在做什麼錯嗎?

或者有沒有更好的方法獲取文件數與多個過濾器,然後通過所有文件的數組?

我使用Visual Studio 2015年

感謝

+2

你能不能請在這裏發表您的代碼 - 網站的規則是郵政編碼在這裏,而不是其他地方,否則其他地方可以去,然後你的問題沒有意義 – BugFinder

+0

即使與代碼的問題是沒有意義的 - 我們會als o需要文件夾中文件名稱的示例。 – PaulF

+0

什麼是'ReportDirectory'?什麼是'sProjectNumber'?什麼是目錄名稱?這個問題是無法回答的。 –

回答

3

Directory.GetFiles返回完整的文件路徑,所以你必須先剝去的路徑。例如與Path.GetFileName

string[] MatchedFiles = Directory 
    .GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
    .Where(s => Path.GetFileName(s).StartsWith(this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 
+0

所以唯一的方法是手動過濾數組以獲取文件數量? –

+1

@TomPisz那麼,或者你可以使用henningbenks解決方案讓'GetFiles'方法過濾它。由於你的過濾器足夠簡單,所以也可以工作。 –

1

應工作直接使用模式:

string[] MatchedFiles = Directory 
.GetFiles(this.sReportDirectory, this.sProjectNumber + "_InputCounts*", SearchOption.AllDirectories) 
.ToArray(); 
+0

我的原始碼是http://pastebin.com/Q0tPRJ6x。這工作得很好,給了我正確的號碼。然而,從那以後我發現我需要照顧其他文件名稱,因此使用StartWith的嘗試。 –

-1

也許你應該在StartsWith方法使用完整路徑:

string[] MatchedFiles = Directory 
.GetFiles(this.sReportDirectory, "*", SearchOption.AllDirectories) 
.Where(s => s.StartsWith(this.sReportDirectory + "\\" + this.sProjectNumber + "_InputCounts", StringComparison.CurrentCultureIgnoreCase)) 
.ToArray(); 
+0

sReportDirectory =「J:\\ PROD \\ Projects \\ 99999 Project Test \\」 –

+0

從我的代碼中刪除「\\」。 – daniel

+0

「刪除反斜槓」 - 或者更好地使用'路徑。Combine()'以平臺無關的方式處理這些問題。 –