Вы делаете al oop условным для существующего файла:
Dim filename = "a.png"
Dim dirname = "c:\temp"
Dim filePath = Path.Combine(dirname, filename)
Dim i as Integer = 1
While(IO.File.Exists(filePath))
filePath = Path.Combine(dirname, i & "_" & filename)
i += 1
End While
В конце концов l oop найдет путь к файлу, который не существует.
Ввод числа в начале имени файла, кстати, вероятно, плохая идея. Я рекомендую вам поместить его в конец:
filePath = Path.Combine(dirname, Path.ChangeExtension(filename, i & Path.GetExtension(filename)))
Это делает файлы типа photo.png, photo.1.png, photo.2.png, photo.3.png ...
Я бы заключил это в функцию, которая находит имя файла, которое не соответствует классу sh:
Function GetRelatedNonExistantFilepath(Dim desiredPath as String) As String()
Dim filename = Path.GetFilenameWithoutExtension(desiredPath)
Dim ext = Path.GetExtension(desiredPath)
Dim dirname = Path.GetDirectoryName(desiredPath)
Dim filePath = desiredPath
Dim i as Integer = 1
While(IO.File.Exists(filePath))
filePath = Path.Combine(dirname, filename & "_" & i & ext)
i += 1
End While
Return filePath
End Function
Следовательно, вы бы использовали его как:
'want to move to c:\temp\photo.png but it might exist
Dim dest = "c:\temp\photo.png"
Dim actualDest = GetRelatedNonExistantFilepath(dest)
'move file to actual dest
IO.FIle.Move(sourcePath, actualDest)