Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
Заблокирован

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

26.10.2013, 17:06. Показов 6881. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно столкнулся с такой записью пути файла:

..\..\..\..\..\..\WINDOWS\system32\SHELL 32.dll

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

Visual Basic
Debug.Print CreateObject("Scripting.FileSystemObject").GetAbsolutePathName("..\..\..\..\..\..\WINDOWS\system32\SHELL32.dll")
Какая инструкция создаёт такие имена ?

Что интересно, если изменять эти значения то абсолютное имя может поменяться
Visual Basic
1
2
ChDir ("C:\Documents and Settings\")
ChDrive ("H:\")
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2013, 17:06
Ответы с готовыми решениями:

FileSystemObject и относительные пути
Здравствуйте! вопрос в след. предположим я мне нужно обратится к файлу на чтение я объявляю новый объект fso = new...

Скрипт копирования пути к файлу\папке и вставка пути в письмо Outlook
Всем доброго времени суток! Помогите, пож-та, разобраться\дописать скрипт. Есть скрипт на открытие\создание нового сообщения в Outlook....

H2 относительные пути
Всем доброго времени суток! Я недавно сел разбираться с базой данных H2 и сразу же возник такой вопрос: Когда мы создаем базу,...

19
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
26.10.2013, 17:43
Лучший ответ Сообщение было отмечено The trick как решение

Решение

.. - указатель на родительский каталог, значит ..\..\ - указатель на родительский каталог родительского каталога
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Какая инструкция создаёт такие имена ?
Соглашения об именованиях
Такой путь можно самому сгенерировать
1
Заблокирован
26.10.2013, 18:01  [ТС]
Тоесть я пересчитаю число разделителей до ...Name.txt
и заменю паки на ..\ это будет трактоваться относительным путём ?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
26.10.2013, 19:02
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Тоесть я пересчитаю число разделителей до ...Name.txt
и заменю паки на ..\ это будет трактоваться относительным путём ?
Относительный путь, это путь относительно текущей директории. Если допустим тебе необходимо обратиться к каталогу, который находится выше текущего, или в сестринскую папку то можно обращаться ..\СестринскаяПапка\
0
Заблокирован
26.10.2013, 19:15  [ТС]
Чет слишком сложно, ладно постораюсь переварить

Добавлено через 5 минут
Тоесть предже чем гдето указывать относительный путь, то надо чтоб
1 была указанна текущая папка
2 относительные пути это родительские папки(текущей)
3 относительно текущей далее полный путь
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
26.10.2013, 19:17
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Чет слишком сложно, ладно постораюсь переварить
Что сложного то?
Имеем путь "D:\Program files\VB98\Project\Main\Child\", в программе текущим каталогом назначаем "Main", т.е. "D:\Program files\VB98\Project\Main\". Теперь чобы обратиться к "Child" используем просто "Child". Также допустим имеется еще один путь "D:\Program files\VB98\Project\tttt\qqq". Из программы мы можем обратиться по этому пути 2-мя способами, либо полный путь "D:\Program files\VB98\Project\tttt\qqq", либо относительный "..\tttt\qqq"
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.10.2013, 19:23
Лучший ответ Сообщение было отмечено The trick как решение

Решение

JoraVoenyjHaker,
см. Например ты или твоя программа находятся здесь:

c:\temp\myproga\my.exe

ее путь такой:

c:\temp\myproga

чтобы открыть файл, который находится здесь:

c:\temp\doc.doc

нужно написать:

..\doc.doc

т.е. .. - это на один уровень вверх.

Если тебе нужно открыть файл, который находится здесь:

c:\temp\myproga\bin\wget.exe

т.е. наоборот - на уровень глубже,
ты пишешь:

bin\wget.exe
1
Заблокирован
26.10.2013, 19:25  [ТС]
...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.10.2013, 19:26
Смысл и практическую значимость бреда в пути, который написан в первом посте я объяснить не могу.
0
Заблокирован
26.10.2013, 19:33  [ТС]
вроде дошло, если бы я знал как это делаеться я бы и вопрос коректнее задал

Добавлено через 53 секунды
Это был пример такого пути, чего прикапываться то...
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.10.2013, 19:36
Цитата Сообщение от Dragokas Посмотреть сообщение
практическую значимость бреда в пути
Открой любой файл проекта на VB6 в блокноте, и почти везде увидишь подобное
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\ system32\stdole2.tlb#OLE Automation
Reference=*\G{3181A65A-CC39-4CDE-A4DF-2E889E6F1AF1}#1.51#0#..\..\..\..\WINDOWS \SYSTEM32\olelib.tlb#Edanmo's OLE interfaces & functions v1.81
1
Заблокирован
26.10.2013, 23:37  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Открой любой файл проекта на VB6 в блокноте
Pro_grammer, я таки из за этого и интересуюсь )))

Добавлено через 1 час 12 минут
Вот такой алгоритм правильный будет ???

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function RelativeName$(AbsName$, Optional RelativeFolder$)
    'Создание относительного пути
    'Арг: Полный путь // Относительная папка
    
    Dim MyDir$, j$(), j1$(), f&, ubnj&, ubnj1&
    Const r$ = "\", rp$ = "..\"
    MyDir = IIf(RelativeFolder <> "", RelativeFolder, CurDir$)
    j = Split(AbsName, r): j1 = Split(MyDir, r)
    ubnj = UBound(j): ubnj1 = UBound(j1)
    For f = 0 To ubnj
        If f > ubnj1 Then GoTo 20
        If j(f) <> j1(f) Then GoTo 10
    Next
10
    For f = f To ubnj 'Запись верхних папок ..\ + путь откуда пошла развилка
        RelativeName = rp & RelativeName & j(f) & IIf(f < ubnj, r, "")
    Next
    Exit Function
20
    For f = f To ubnj 'Запись пути после относительной папки
        RelativeName = RelativeName & j(f) & IIf(f < ubnj, r, "")
    Next
End Function
Добавлено через 4 минуты
У меня задача в том чтоб создать относительный путь
не устанавливая папки по умолчанию, вообще к файлам не лезть
чисто текстовой сборкой.....
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
26.10.2013, 23:39
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
У меня задача в том чтоб создать относительный путь
Относительно чего?
0
Заблокирован
27.10.2013, 20:28  [ТС]
Вот я сделал, но уже тчательней всё обдумал !

Модуль Form1:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
0
Заблокирован
27.10.2013, 20:37  [ТС]
Immediate:
Миниатюры
Относительные пути  
0
Заблокирован
27.10.2013, 22:32  [ТС]
Админы:
можете отправить этот код в полезные решения
только отредактируйте, поставте скриншот в один пост
и укажите на эту страницу обсуждения
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.10.2013, 23:35
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
только отредактируйте, поставте скриншот в один пост
и укажите на эту страницу обсуждения
А почему мы должны за тебя работать? Сам давай. А мы тут лишнее потрем.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.10.2013, 23:40
JoraVoenyjHaker, какая практическая польза от этого? Не легче ли указать сразу абсолютный путь?
0
Заблокирован
28.10.2013, 02:22  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
какая практическая польза от этого? Не легче ли указать сразу абсолютный путь?
Я хочу сделать чтото - вроде своего супер-инсталятора а для этого
мне потребуеться относительность путей

Не по теме:

Сам сделал!.... отправил в полезные коды....
затерите лишнюю болтовню здесь....



Большинство программ придерживаються жостких путей
от того иногда и возникают глюки на клиентских машинах
так вот я хочу предусмотреть портативное использование
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.10.2013, 03:27
app.path - что может быть еще более портативней.

Смотрите поосторожней с относительными путями.
Есть шанс попасть очень не туда (конкретно - в системную папку), если запустить программу с повышенными привилегиями.
Мы это обсуждали, начиная с 4-го поста: Наиболее частые ошибки, заметки особенностей программинга BAT файлов, баги интерпретатора*
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2013, 03:27
Помогаю со студенческими работами здесь

Относительные пути
Вот небольшой сценарий который просто архивирует каталоги из одной папки в другую с небольшим диалогом для пользователя. Все работает когда...

Относительные пути
Есть структура сайта в корневой папке, создал папку Pages и перенёс туда .html файл, но запуская его, он не видит .css?!

Относительные пути
можно ли присвоить определенному пути переменную, что бы заменить ../../../../someFolder/someFile.html на ...

Относительные пути в delphi
Здравствуйте! Есть программа работы с базой данных на foxpro. Все таблицы базы хранятся по пути e:/Практика/База данных . А программа сама...

WebUserControl и относительные пути
ASP.NET Я создал WebUserControl и поместил его в папку compononts Веб приложения В контроле кусок HTML в котором есть картинка&lt;TD...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru