循环文件名

时间:2013-04-08 21:25:27

标签: .net vb.net file

我正在尝试遍历文件夹中的所有文件,并仅列出其文件名中包含特定文本的文件。例如,在文件夹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.pdfTest1.pdfTest2.pdf,但出于某种原因,此代码只显示了{{1},而不是列出所有三个文件在回复中。

如果我将Test.pdf循环更改为:

For Each

然后我仍然得到For Each fileName As String In Directory.GetFiles(varFolderPath, varFileName & "*") 的相同结果。为什么呢?

1 个答案:

答案 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