Diamock писал(а):На скриншоте пример файла без расширения.
А, эти. Ну тут да, но кто ими пользуется то...
Diamock писал(а):В приложенном к сообщению проекте, тестируется ваш код, и мой написанный на основе вашего.
Ну тут поругать и тебя и меня надо.
Такой путь может быть, и нормально переварится, я просто о нем не подумал, так как такое путь, наверное, можно ввести только в ручну. Прчина опять в разных слешах. Я допустил почти ту же ошибку что и ты в начале.
Но я то ладно. Использовать "or" в данном случае еще хуже, так как неизвестно к какому результату приведет. Не стоит его совать где попало.
Но в любом случае, проблема то из пальца высосана. Тут выходов куча
1. Придумать новый алгоритм поиска последнего слеша. Например поиск максимального значения между двумя InstrRev-ми
2. Сравнивать два InstrRev-а например так iSlash = IIf(InStrRev(FN, "/") > InStrRev(FN, "\"), InStrRev(FN, "/"), InStrRev(FN, "\")). С точки зрения красоты не очень, так как много вызовов, но как вариант
3. Выставить все слеши под одно для внутренней функции с помощью Replace.
4....
5....
Да куча всего. По поводу расширений...ну замени например вот этим
- Код: Выделить всё
If InStrRev(FN, ".") > iSlash Then
FTFFN_SLIM = Mid$(strBuf, 1, InStrRev(strBuf, ".") - 1)
Else
FTFFN_SLIM = Mid$(strBuf, 1, iSlash - 1)
End If
И все будет работать.
Итого получаем с новыми проблемами новое решение на коленке
- Код: Выделить всё
Private Function FTFFN_SLIM(FN As String) As String
Dim iSlash As Integer
Dim strBuf As String
iSlash = IIf(InStrRev(FN, "/") > InStrRev(FN, "\"), InStrRev(FN, "/"), InStrRev(FN, "\"))
If iSlash <> 0 Then
strBuf = Replace$(Mid$(FN, iSlash + 1), """", "")
If InStrRev(FN, ".") > iSlash Then
FTFFN_SLIM = Mid$(strBuf, 1, InStrRev(strBuf, ".") - 1)
Else
FTFFN_SLIM = Mid$(strBuf, 1, iSlash - 1)
End If
End If
End Function
Кстати твой код поиска расширения в случае ""C:\Users/Sl.im/Downloads"" приведет к неудаче, а мое нормально обработается (это к слову про файлы без расширения, эта проблема тоже решится)
Пишите жизнь на чистовик.....переписать не удастся.....