0

我正在尝试遍历文件夹中的所有文件,并仅列出文件名中包含特定文本的文件。例如,当TEST.pdf在文件夹 X 中移动一个新文件时,如果该文件夹中已经有一个名为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.pdfTest2.pdf,但由于某种原因,这段代码没有列出所有三个文件,而是Test.pdf在响应中显示我。

如果我将For Each循环更改为:

For Each fileName As String In Directory.GetFiles(varFolderPath, varFileName & "*")

然后我仍然得到相同的结果 only TEST.pdf。为什么?

4

1 回答 1

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
于 2013-04-08T21:28:19.370 回答