我正在尝试遍历文件夹中的所有文件,并仅列出其文件名中包含特定文本的文件。例如,在文件夹X中移动新文件TEST.pdf
时,如果该文件夹中已存在名为Test.pdf
的文件,则新文件应重命名为Test1.pdf
,依此类推。为了做到这一点,我首先尝试查找名称中包含单词TEST
的所有现有文件的计数。
这是我到目前为止的代码:
For Each FoundFile As String In My.Computer.FileSystem.GetFiles(varFolderPath, FileIO.SearchOption.SearchTopLevelOnly, varFileName & "*")
If FoundFile.Contains(varFileName) Then
Response.Write(FoundFile & "</br>")
End If
Next
传递的变量varFileName
的值为TEST.pdf
。
目前,我在文件夹中有Test.pdf
,Test1.pdf
和Test2.pdf
,但出于某种原因,此代码只显示了{{1},而不是列出所有三个文件在回复中。
如果我将Test.pdf
循环更改为:
For Each
然后我仍然得到For Each fileName As String In Directory.GetFiles(varFolderPath, varFileName & "*")
的相同结果。为什么呢?
答案 0 :(得分:2)
目前我在文件夹中有Test.pdf,Test1.pdf和Test2.pdf但由于某种原因这个代码,而不是列出所有三个文件,只是在response.write中显示我的Test.pdf文件。
那很简单。名称“Test1.pdf”不包含“TEST.pdf”,即使您不区分大小写也是如此。
也许你应该分别匹配扩展和非扩展部分 - 检查扩展是否匹配和文件名的第一部分从搜索文件名的第一部分开始。如下所示:
Dim extension = Path.GetExtension(varFileName)
Dim rest = Path.GetFileNameWithoutExtension(varFileName)
If Path.GetExtension(FoundFile) = extension AndAlso _
Path.GetFileNameWithoutExtension(FoundFile).StartsWith(rest) Then
Response.Write(FoundFile & "</br>")
End If