String.Contains与Directory.GetDirectories

时间:2015-06-02 13:53:25

标签: vb.net foreach

出于某种原因,这句话完全绕过了包含所述文字的文件夹,我做错了什么?

For Each fold As String In Directory.GetDirectories("C:\documents")
    If fold.Contains("pdf") Then

我在c:\ documents文件夹中有文件夹,名称如下:

pdfone
pdfretrieve
extrapdf

当VS通读时,我看到了字符串:

"c:\documents\pdfone"
"c:\documents\pdfretrieve"
"c:\documents\extrapdf"

但是它正好超过了它们并且没有进入If语句。

1 个答案:

答案 0 :(得分:2)

  

是的,它是PDFone。 .Contains属性区分大小写吗?

String.Contains区分大小写(与.NET框架中的大多数方法一样)。如果您想忽略这种情况,则必须使用String.IndexOf

If fold.IndexOf("pdf", StringComparison.InvariantCultureIgnorecase) >= 0 Then

MSDN在这里提及:

  

此方法执行序数(区分大小写和   文化不敏感)比较。搜索从第一个开始   这个字符串的字符位置,并持续到最后一个   角色位置。

另外,GetDirectories返回包含其路径的目录名。因此,在完整路径上搜索子字符串容易出错。相反,您可以使用Path.GetFileName(是的,不是GetDirectoryName,因为它返回了备注中提到的父目录):

If Path.GetFileName(fold).IndexOf("pdf", StringComparison.InvariantCultureIgnorecase) >= 0 Then