2013-04-08 95 views
0

我试图循环遍历文件夹中的所有文件,并只列出那些文件名中包含特定文本的文件。例如,当在文件夹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.pdfTest2.pdf,但由于某些原因,这个代码,而不是列出所有三个文件,只是表明我的回应Test.pdf

如果我改变我的For Each环路:

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

话还是我得到的只是TEST.pdf相同的结果。为什么?

+4

你知道'Test1.pdf'和'Test2.pdf'不*包含字符串'Test.pdf'? – fvu 2013-04-08 21:28:31

+0

使用'ListBox'而不是'Response.Write(FoundFile&“
”)'。 – 2013-04-08 21:32:13

回答

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 
+0

谢谢大家的快速回复。是的,通过分隔文件名及其扩展名,代码工作正常。 – user2221375 2013-04-08 21:54:46