FileTitle и FileName

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 23.02.2010 (Вт) 16:38

Здравствуйте Уважаемые!
Воспользовавшись мудрыми рекомендациями уважаемых гуру нашего форума и MSDN - получил следующую функцию:

Код: Выделить всё
Private Function FileTitleFromFileName(FileName As String) As String
    Dim intLastBackslash As Integer
    intLastBackslash = InStrRev(FileName, "\")
    FileTitleFromFileName = Right(FileName, Len(FileName) - intLastBackslash)
End Function

Сделал два теста - работает.
Посоветуйте, может стоит что-то подправить?
Проект прилагаю.
С уважением...
Вложения
FileTitleFromFileName.rar
FileTitleFromFileName
(4.37 Кб) Скачиваний: 54
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 23.02.2010 (Вт) 17:10

Плохая функция. Windows скушает путь e:/bru, а твоя функция — нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 23.02.2010 (Вт) 17:14

Хакер писал(а):Плохая функция. Windows скушает путь e:/bru, а твоя функция — нет.

Уважаемый Хакер, принял к сведению. Подумаю, как исправить.

Добавлено позже
-----------------------------------
На сколько велика вероятность, что при сканировании папок, и поиске файлов с расширением *.vbp. Я получу вместо '\" - "/".
Последний раз редактировалось Diamock 24.02.2010 (Ср) 19:21, всего редактировалось 2 раз(а).
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 23.02.2010 (Вт) 17:24

Ещё некоторые функции хорошо поймут путь "foo\bar", а твоя вернёт кавычку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 23.02.2010 (Вт) 17:53

Хакер писал(а):Ещё некоторые функции хорошо поймут путь "foo\bar", а твоя вернёт кавычку.

Может быть, для начала организовать поиск по входящей строке по / и ". И исходя из результата, получать FileTitle.
Хотелось бы знать, какого вида пути и имена файлов быввают в Windows, что бы сразу всё предусмотреть.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 23.02.2010 (Вт) 19:19

Всё подправил.
Код: Выделить всё
Option Explicit

Const BackSlash As String = "\"     'Обратная косая черта
Const ForwardSlash As String = "/"         'Косая черта

'Функция поика кавычки в FileTitle
Private Function SearchQuote(myString As String) As String

Dim myStr As String

myStr = Right(myString, 1)                          'Поиск " в конце FileTitle
If myStr = """" Then
    SearchQuote = Left(myString, Len(myString) - 1) 'Если есть - убираем
Else
    SearchQuote = myString                          'если нет - возвращаем
End If

End Function

'Поиск \ и /
Private Function BackSlashVSSlash(FileName As String) As Boolean

If InStr(1, FileName, BackSlash) <> 0 Then      'Если \
    BackSlashVSSlash = True                     'True
ElseIf InStr(1, FileName, ForwardSlash) <> 0 Then
    BackSlashVSSlash = False                    'Иначе False
End If

End Function

Public Function FileTitleFromFileName(FileName As String) As String
    Dim intLastSlashes As Integer
    Dim varFT As String
    Dim Slash As Boolean

    Slash = BackSlashVSSlash(FileName)  'Определяем \ или / в FileName

    Select Case Slash
        Case True
            intLastSlashes = InStrRev(FileName, BackSlash)
            varFT = Right(FileName, Len(FileName) - intLastSlashes)
        Case False
            intLastSlashes = InStrRev(FileName, ForwardSlash)
            varFT = Right(FileName, Len(FileName) - intLastSlashes)
    End Select

    FileTitleFromFileName = SearchQuote(varFT)  'Если есть, убираем кавычку
End Function

Проект прилагаю.
С уважением...
Вложения
FileTitleFromFileName.rar
(4.94 Кб) Скачиваний: 66
In der Beschrankung zeigt sich erst der Meister
Графоманю...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 23.02.2010 (Вт) 23:21

А зачем заморочки с кавычками? Такого пути ведь тоже быть не может

Работает не правильно:
"C:\Users/Slim/Downloads.gr" обработается как "Users/Slim/Downloads.gr", а "C:/Users/Slim/Downloads.gr" обработается как "Downloads.gr", чуешь почему?

Плюс ко всему так и не распарсил расширение файла, если оно есть, а без этого получилось что все что написано тупо превращается в отрезание по слешу с конца строки (и то, если первый слеш и последний слеш имеют один тип), а это можно оформить проще (даже с учетом твоих кавычек)
Код: Выделить всё
Dim iSlash As Integer
   
    iSlash = InStrRev(Me.Text3, "/") + InStrRev(Me.Text3, "\")
   
    If iSlash <> 0 Then
        Me.Text2 = Replace$(Mid$(Me.Text3.Text, iSlash + 1), """", "")
    End Iff
Последний раз редактировалось SLIM 25.02.2010 (Чт) 22:51, всего редактировалось 2 раз(а).
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 24.02.2010 (Ср) 6:29

Такого пути ведь тоже быть не может

В низких функциях — нет, в высоких (и особенно ComDlg) — да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 24.02.2010 (Ср) 7:27

Может быть. Но мне встречать не приходилось. Есть пример получения пути с кавычками?
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: FileTitle и FileName

Сообщение Хакер » 24.02.2010 (Ср) 7:53

В коммондиалоге выбери два или более файлов. Ну или о первых двух параметрах CreateProcess почитай.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 24.02.2010 (Ср) 20:43

Здравствуйте Уважаемые!

В очередной раз, внимательно прочитав все сообщения топика, я обратил внимание на слова Уважаемого SLIM 'а:
Плюс ко всему так и не распарсил расширение файла

FileTitle - это то, что останется от FileName, после отбрасывания пути к файлу и его расширения.
А, я то наивный полагал, что Test.txt - и есть FileTitle.
Спасибо Уважаемые, в очередной раз наставили на путь истинный.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 24.02.2010 (Ср) 21:30

Вообще, мы тут все(ну, по крайней мере большинство - точно) наивно полагали, что тебе нужен именно точно такой же FileTitle, как выдаёт CommonDialog.

Отдельно от CommonDialog понятия FileTitle, судя по MSDN, не существует.

Так что ты уж определись сам для начала, что именно тебе нужно. =)
label:
cli
jmp label

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 25.02.2010 (Чт) 22:07

Здравствуйте Уважаемые!
Вот ещё вариант кода получения FileTitle из FileName
Код: Выделить всё
Option Explicit

'Внутренние константы модуля
Const ForwardSlash As String = "/"
Const BackSlash As String = "\"
Const Point As String = "."
Const Quote As String = """"

'Отрезаем FileName по последнему / ForwardSlash
Private Function InStrRevFSl(FileName As String) As String
    Dim intLastForwardSlash As Integer
   
    intLastForwardSlash = InStrRev(FileName, ForwardSlash)
    InStrRevFSl = Right(FileName, Len(FileName) - intLastForwardSlash)
End Function

'Отрезаем FileName по последнему \ BackSlash
Private Function InStrRevBSl(FileName As String) As String
    Dim intLastBackSlash As Integer
   
    intLastBackSlash = InStrRev(FileName, BackSlash)
    InStrRevBSl = Right(FileName, Len(FileName) - intLastBackSlash)
End Function

'Отрезаем расширение файла (.xxx)
Private Function CutToExt(FileName As String) As String
    Dim cPoint As Integer
   
    cPoint = InStrRev(FileName, Point)
   
    If cPoint = 0 Then
        CutToExt = FileName
        Exit Function
    Else
        CutToExt = Left(FileName, Len(FileName) - (Len(FileName) - cPoint + 1))
    End If
End Function

'Удаление кавычек
Private Function DelQuote(FileName As String) As String
    Dim NoQuote As String
    NoQuote = Replace(FileName, Quote, "")
    DelQuote = NoQuote
End Function


Public Function FileTitleFromFileName(FileName As String) As String
    Dim strFT As String

    strFT = FileName

    strFT = DelQuote(strFT)
    strFT = InStrRevBSl(strFT)
    strFT = InStrRevFSl(strFT)
    strFT = CutToExt(strFT)

    FileTitleFromFileName = strFT
End Function

Прошу, протестируйте, прокомментируйте, покритикуйте.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 25.02.2010 (Чт) 22:56

Я правда не понимаю зачем ты так извращаешься.
Я же тебе дал код, он работает и занимает пять строчек. С учетом отбрасывания расширения будет так

Код: Выделить всё
Dim iSlash As Integer
Dim strBuf As String
   
    iSlash = InStrRev(Me.Text3, "/") + InStrRev(Me.Text3, "\")
   
    If iSlash <> 0 Then
        strBuf = Replace$(Mid$(Me.Text3.Text, iSlash + 1), """", "")
        Me.Text2 = Mid$(strBuf, 1, InStrRev(strBuf, ".") - 1)
    End If

И то, можно короче, но наглядность потеряется.
Зачем обертывать каждую строку в свою функцию?
Пишите жизнь на чистовик.....переписать не удастся.....

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 27.02.2010 (Сб) 4:49

Уважаемый SLIM!
Большое спасибо за помощь. Ваш код, работает немного некорректно, поэтому я его разбил на несколько функций, чтобы понять принцип.
Потом я разобрался, что к чему и упростил всё в одну функцию. Вышло следующее:
Код: Выделить всё
Public Function FileTitleFromFileName(FileName As String) As String
    Dim iSlash As Integer
    Dim strBuf As String
    Dim iPoint As Integer
   
        iSlash = InStrRev(FileName, "\") Or InStrRev(FileName, "/")
       
        If iSlash <> 0 Then
            strBuf = Replace$(Mid$(FileName, iSlash + 1), """", "")
            iPoint = InStrRev(strBuf, ".")
            If iPoint = 0 Then
                FileTitleFromFileName = strBuf
               
            Else
                FileTitleFromFileName = Mid$(strBuf, 1, InStrRev(strBuf, ".") - 1)
            End If
        End If
End Function

В строке
Код: Выделить всё
iSlash = InStrRev(FileName, "\") Or InStrRev(FileName, "/")

Я заменил + на or, потому что сложение давало большую величину и отрезалось большее количество символов, чем требуется.
Поставил проверку, на наличие расширения у файла, потому что порой встречаются файлы вида File (без расширения). Без неё функция выдаёт ошибку: Run-time error '5': Invalid procedure call or argument.
Ещё раз благодарю всех за помощь!
С уважением...
P.s. От констант, отказался для удобства переносимости функции.
P.p.s. Уважаемый SLIM, вы упомянули, что код можно ещё упростить. Подскажите каким образом. Самому на ум ничего пока не приходит.
In der Beschrankung zeigt sich erst der Meister
Графоманю...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 27.02.2010 (Сб) 7:37

Diamock писал(а):Я заменил + на or, потому что сложение давало большую величину и отрезалось большее количество символов, чем требуется.

Можно и or. Так оно и было изначально. Но я подумал, "а зачем?". Предполагалось, что только у одного из этих выражений будет 0, а у второго будет какое-то значение. И что значит получилась слишком большая цифра? Если у тебя получилось отличное от нуля значение в обоих выражениях, то покажи этот путь, мне интересно. В данном случае or не к месту и приравнивается к сложению по смыслу. Не понятно мне тут совсем твоя логика. Опиши что у тебя не пошло с "+"
Diamock писал(а):потому что порой встречаются файлы вида File (без расширения)

А такие бывают?
Пишите жизнь на чистовик.....переписать не удастся.....

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 27.02.2010 (Сб) 8:24

Уважаемый SLIM!
Тест, я проводил на приведённой вами строке:
"C:\Users/Slim/Downloads.gr"

В данный момент, VB под рукой нет, что из этого получалось точно не помню (то ли Down, то ли loads).
Файлы без расширения встречал, где не помню, но постараюсь привести пример, когда вновь столкнусь с этим.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 27.02.2010 (Сб) 11:40

Уважаемый SLIM!
На скриншоте пример файла без расширения.
С уважением...
Вложения
Snap1.png
Файл без расширения
Snap1.png (30.79 Кб) Просмотров: 3005
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 27.02.2010 (Сб) 18:25

Уважаемый SLIM!
В приложенном к сообщению проекте, тестируется ваш код, и мой написанный на основе вашего.
С уважением...
Вложения
Exemple Code.rar
Тест двух вариантов кода FileTitleFromFileName
(1.48 Кб) Скачиваний: 55
In der Beschrankung zeigt sich erst der Meister
Графоманю...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 27.02.2010 (Сб) 23:08

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"" приведет к неудаче, а мое нормально обработается (это к слову про файлы без расширения, эта проблема тоже решится)
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 27.02.2010 (Сб) 23:50

SLIM писал(а):А, эти. Ну тут да, но кто ими пользуется то...

Я. Достаточно?

Ребят.. А вот этим вам воспользоваться религия не позволяет?
http://msdn.microsoft.com/en-us/library/bb773559.aspx
label:
cli
jmp label

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 28.02.2010 (Вс) 8:10

Уважаемый SLIM!
Несомненно ваш код - лучше. С вашего разрешения, буду пользоваться им. Если чесно, пока не до конца разобрался в его работе, но разберусь.

Уважаемый iGrok!
Расскажите, для чего нужны файлы без расширения.
А по поводу религии. MSDN, на данный момент, для меня сложна для понимания (структура MSDN). Иногда не понятно, что и, как искать в MSDN. Полагаю, что со временем разберусь.

Всем спасибо за помощь.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: FileTitle и FileName

Сообщение Viper » 28.02.2010 (Вс) 9:06

Diamock писал(а):Расскажите, для чего нужны файлы без расширения.
Дело не в том, что они нужны, а в том, что они есть.
Diamock писал(а):А по поводу религии. MSDN, на данный момент, для меня сложна для понимания (структура MSDN). Иногда не понятно, что и, как искать в MSDN. Полагаю, что со временем разберусь.
Если уж дело зашло о религии, то MSDN есть библия разработчика. Посему все поиски необходимо начинать именно с MSDN.
Весь мир матрица, а мы в нем потоки байтов!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: FileTitle и FileName

Сообщение SLIM » 28.02.2010 (Вс) 12:26

iGrok писал(а):Я. Достаточно?

Достаточно. Но ты программист, а не обычный пользователь.
iGrok писал(а):Ребят.. А вот этим вам воспользоваться религия не позволяет?

Кто ж знал что MS и здесь подумало. Буду знать ))
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: FileTitle и FileName

Сообщение iGrok » 28.02.2010 (Вс) 13:32

SLIM писал(а):Кто ж знал что MS и здесь подумало. Буду знать ))

А ты априори считай, что "MS подумало".
Если это окажется так - съэкономишь время, а если нет - будет очередной повод на них поворчать. =)
label:
cli
jmp label

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: FileTitle и FileName

Сообщение MIT » 28.02.2010 (Вс) 13:58

А ведь можно было просто взять готовую функцию от MS...
Код: Выделить всё
Const DirectorySeparatorChar As String = "\"
Const AltDirectorySeparatorChar As String = "/"
Const VolumeSeparatorChar As String = ":"

Public Function GetExtension(ByVal path As String) As String
    If (path = "") Then
        GetExtension = ""
        Exit Function
    End If
   
    Dim length As Long: length = Len(path)
    Dim startIndex As Long: startIndex = length
    Do While (startIndex >= 0)
        Dim ch As String: ch = Mid$(path, startIndex, 1)
        If (ch = ".") Then
            If (startIndex <> (length - 1)) Then
                GetExtension = Mid$(path, startIndex, (length - startIndex) + 1)
                Exit Function
            End If
         GetExtension = ""
        Exit Function
        End If
        If (((ch = DirectorySeparatorChar) Or (ch = AltDirectorySeparatorChar)) Or (ch = VolumeSeparatorChar)) Then
            Exit Do
        End If
        startIndex = startIndex - 1
    Loop
    GetExtension = ""
End Function
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 28.02.2010 (Вс) 15:37

Здравствуйте Уважаемые!
А ведь можно было просто взять готовую функцию от MS...

Уважаемый MIT.
Не подумайте, что я вырываю вашу цитату из контекста, но на тестируемой мной и Уважаемым SLIM'ом строке:
Код: Выделить всё
"C:\Users/Slim/Downloads.gr"

Приведённая вами функция выдаёт вот такой результат: .gr"
Я, конечно понимаю, что по названию GetExtension - получение расширения.
Зачем, использовать длвольно громоздкую конструкцию, приведённого вами кода, когда Уважаемый SLIM, сделал это в несколько строк.

С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: FileTitle и FileName

Сообщение Alec » 28.02.2010 (Вс) 19:08

Э, уважаемые...
Или я пропустил или все же не было предложения воспользоваться методами FileSystemObject?
Код: Выделить всё
Dim fso as object
Dim s as String
set fso= CreateObject("Scripting.FileSystemObject")
fso.GetFileName(s)
fso.GetExtensionName(s)
fso.GetBaseName(s)
Иногда лучше вовремя остановиться...
И начать заново!

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: FileTitle и FileName

Сообщение Diamock » 28.02.2010 (Вс) 19:43

Alec писал(а):Э, уважаемые...
Или я пропустил или все же не было предложения воспользоваться методами FileSystemObject?
Код: Выделить всё
Dim fso as object
Dim s as String
set fso= CreateObject("Scripting.FileSystemObject")
fso.GetFileName(s)
fso.GetExtensionName(s)
fso.GetBaseName(s)


Уважаемый Alec. Нет о FSO, речь здесь не заходила. Протестировав твой код, я установил, что не все пути он обрабатывает корректно.
Например в случае обработки "C:\Users/Sl.im/Downloads", возвращается: Downloads" (остаётся кавычка).
Использовал такой код:
Код: Выделить всё
Public Function FTFFN_Alec(FN As String) As String
    Dim fso As Object
   
    Set fso = CreateObject("Scripting.FileSystemObject")
    FTFFN = fso.GetBaseName(FN)
End Function

С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: FileTitle и FileName

Сообщение MIT » 28.02.2010 (Вс) 20:02

GetBaseName это какбэ имя файла, а расширение — это GetExtensionName
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Пред.След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 15

    TopList