我有以下LINQ查询来过滤文件:
Dim arrayFiles As FileInfo()
Dim strFolder As String = "C:\Temp"
Dim strSearch As String = "[AFile].*"
Dim directoryInfo As DirectoryInfo = New IO.DirectoryInfo(Path:=strFolder)
arrayFiles = directoryInfo.GetFiles(searchPattern:=strSearch,
searchOption:=SearchOption.TopDirectoryOnly).
Where(Function(s) s.Name.ToUpper Like strSearch.ToUpper).
ToArray()
在此示例中,指定的文件夹包含1个文件:“[AFile] .PDF”。上面的示例返回0个文件(数组为空)。
如果我将搜索模式更改为“AFile.PDF”或“*。*”,那么我会获得包含1个文件的正确数组。
为什么搜索模式“AFile。*”在此示例中不起作用?
答案 0 :(得分:1)
您正在为GetFiles提供搜索模式,因此无需使用其他Where
:
arrayFiles = (New IO.DirectoryInfo(Path:=strFolder)).GetFiles(searchPattern:=strSearch,
searchOption:=SearchOption.TopDirectoryOnly).ToArray
您的代码无效,因为[]
括号在VB.NET LIKE operator中具有特殊含义:
[ charlist ] - charlist中的任何单个字符
因此,您需要通过将它们括在括号中来转义这些特殊字符:
Dim strSearch As String = "[[]AFile[]].*"
注意:事实上,您只能转义[
,因为]
只有在与[
配对时才有特殊含义。