Относительные пути - VB

Узнай цену своей работы

Формулировка задачи:

Недавно столкнулся с такой записью пути файла:

..\..\..\..\..\..\WINDOWS\system32\SHELL32.dll

Полный путь можно получить так:

Какая инструкция создаёт такие имена ?

Что интересно, если изменять эти значения то абсолютное имя может поменяться

Решение задачи: «Относительные пути»

textual
Листинг программы
Option Explicit
 
Public Function RelativeName$(AbsName$, Optional RelativeFolder$)
    'Создание относительного пути
    'Арг: Полный путь // Относительная папка [Текущая по умолчанию]
    
    Const r$ = "\", rp$ = "..\"
    Dim MyDir$, ja$(), jr$(), ua&, ur&, f&, Min&, AdUp&, Ign&
    
    MyDir = IIf(RelativeFolder <> vbNullString, RelativeFolder, CurDir$)
    ja = Split(AbsName, r): jr = Split(MyDir, r)
    ua = UBound(ja): ur = UBound(jr)
    Min = IIf(ua < ur, ua, ur) 'верхний индекс для обоих путей
    For f = 0 To Min
        If StrComp(ja(f), jr(f), vbTextCompare) = 0 Then 'Сравнение +игнор. регистра
            ja(f) = vbNullString: Ign = Ign + 1
        ElseIf f = 0 Then 'Если разные драйверы (буква диска)
            RelativeName = AbsName 'Возврат полного пути
            Exit Function
        Else: AdUp = AdUp + 1 'Добавить если папка ещё глубже
        End If
    Next
    RelativeName = Mid$(Join(ja, r), Ign + 1) 'Отрезать путь соответствия
    For f = ur + AdUp To f Step -1 'Добавить трактовку
        RelativeName = rp & RelativeName
    Next
End Function
 
 
Private Sub Form_Load()
    '
    '   Тестирование моей функции RelativeName
    '
    Dim absN$, relF$, result$, o As Object
    Set o = CreateObject("Scripting.FileSystemObject")
    '=================================
1
    absN = "C:\WINDOWS\system32"
    relF = "C:\Program Files\Microsoft Visual Studio\VB98"
    result = RelativeName(absN, relF)
    ChDir (relF) 'Установить текущую
    Debug.Print "Пример 1 ======================================"
    Debug.Print "Абсолютный путь: ", absN & vbCrLf
    Debug.Print "Относительная папка: ", relF & vbCrLf
    Debug.Print "Выходной путь: ", result & vbCrLf
    Debug.Print "Как это видит система:", o.GetAbsolutePathName(result) & vbCrLf
    Debug.Print
2
    absN = "C:\Program Files\Microsoft Visual Studio\VB98"
    relF = "C:\WINDOWS\system32"
    result = RelativeName(absN, relF)
    ChDir (relF)
    Debug.Print "Пример 2 ======================================"
    Debug.Print "Абсолютный путь: ", absN & vbCrLf
    Debug.Print "Относительная папка: ", relF & vbCrLf
    Debug.Print "Выходной путь: ", result & vbCrLf
    Debug.Print "Как это видит система:", o.GetAbsolutePathName(result) & vbCrLf
    Debug.Print
3
    absN = "C:\WINDOWS\system32\SHELL32.dll"
    relF = "C:\Program Files\Microsoft Visual Studio\VB98"
    result = RelativeName(absN, relF)
    ChDir (relF)
    Debug.Print "Пример 3 ======================================"
    Debug.Print "Абсолютный путь: ", absN & vbCrLf
    Debug.Print "Относительная папка: ", relF & vbCrLf
    Debug.Print "Выходной путь: ", result & vbCrLf
    Debug.Print "Как это видит система:", o.GetAbsolutePathName(result) & vbCrLf
    Debug.Print
    Stop 'Остановка /// просмотр окна Immediate
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы