2016-11-24 88 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()'以平台无关的方式处理这些问题。 –