У меня есть следующая функция, которая вызывает себя (рекурсивно). Цель состоит в том, чтобы вернуть уникальное имя файла в формате filename (1) .ext, filename (2) .ext и т. Д.
Function CreateUniqueFileName(strPath As String, strFileName, orderId As Integer) As String
Dim extPos As Integer
Dim extension As String
Dim fileName As String
fileName = ""
extPos = InStrRev(strFileName, ".")
If (extPos > 0) Then
fileName = Left(strFileName, extPos - 1)
extension = Right(strFileName, Len(strFileName) - extPos)
If (orderId = 0) Then
fileName = strFileName
CreateUniqueFileName = fileName
Else
fileName = fileName & " (" & CStr(orderId) & ")." & extension
End If
If (DoesFileExist(strPath & fileName)) Then
Call CreateUniqueFileName(strPath, fileName, orderId + 1)
Else
CreateUniqueFileName = fileName
Exit Function
End If
End If
End Function
Если он вызывается в первый раз и значение orderId равно 0, это всегда первый и поэтому уникальный. В этом случае функция вызывается только один раз. Но когда выполняется рекурсия и DoesFileExists возвращает false, возвращаемое значение должно возвращать сгенерированное имя файла и завершаться. Однако при отладке функция выполняется без ошибок, но всегда возвращает исходное значение вместо результата исходной итерации.
Так, например, если я вызываю эту функцию следующим образом: CreateUniqueFileName ("C: \ Temp \", "" 1010-40-800.jpg ", 1), он проверяет C: \ temp, если уже существует файл с именем 1010-40-800 (1) .jpg, в этом случае вызывается та же функция и orderId обновляется на 1 в этом случае CreateUniqueFileName ("C: \ Temp \", "" 1010-40- 800.jpg ", 2). Тот же процесс повторяется (Recicing). Теперь предположим, что 1010-40-800 (2) .jpg уникален (файл не найден). Я ожидал, что функция вернет 1010-40-800 (2) .jpg как строковый результат. Но вместо этого он вернет значение 1010-40-800 (1) .jpg. Что на самом деле является значением при первом вызове функции.
Что мне здесь не хватает?