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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.10.2004 (Ср) 10:25

А ты в MSDN посмотри. В API-Guide далеко не все функции описаны...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 13.10.2004 (Ср) 10:43

-=TsA=- писал(а):И еще, относительно вашего спора нужен относительный путь из любого каталога, а не только из вложенного. :roll:

Так бы сразу и говорил. Обошлись бы без криков :lol:
Лови:
http://msdn.microsoft.com/library/defau ... pathto.asp

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 13.10.2004 (Ср) 11:50

Благодарю

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 13.10.2004 (Ср) 12:28

Я присоединяюсь к сообщениям, призывающим использовать стандартные функции (если они есть, конечно).

Самый правильный путь, недостижимый в VB, - использование файловых моникеров и их функции IMoniker::RelativePathTo, дающее верный результат для любых путей одного дискового или сетевого корня (в противном случае результат - исходный, не сокращенный, путь).

Наверное, и функция PathRelativePathTo обращается к ним, но я не уверен, потому что тест показывает, что с ее использованием:
C:\Work\MyProg\Prj И C:\Work\Lib\VB\Modules => ..\..\Lib\VB\Modules,
а C:/Work/MyProg/Prj И C:/Work/Lib/VB/Modules => C:/Work/Lib/VB/Modules,
хотя с точки зрения моникеров (да и файловой системы) и во втором случае должно быть ..\..\Lib\VB\Modules.

Также (хотя, конечно, это и экзотика):
C:\Work\.\MyProg\Prj И C:\Work\Lib\VB\Modules => ..\..\..\Lib\VB\Modules
C:\Work\\MyProg\Prj И C:\Work\Lib\VB\Modules => ..\..\..\Lib\VB\Modules
т.е. неверный результат. Ззначит, используется свой доморощенный алгоритм перед обращением к моникерам.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 14.10.2004 (Чт) 10:59

А какая функция выполняет обратную задачу?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.10.2004 (Чт) 11:06

А какая функция выполняет обратную задачу?


А нафига?

Работай с тем что есть - ты же его для этого и получал.
Иначе у тебя что-то неправильно в самой идеологии задачи.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 14.10.2004 (Чт) 11:08

-=TsA=- писал(а):А какая функция выполняет обратную задачу?

А чего, собственно, программа делает? Поделись, если не коммерческая тайна.

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 14.10.2004 (Чт) 11:28

Ну типа специализированного текстого редактора когда несколько файлов связаны в проект (для него используются относительтые пути) при наведении мышки всплывает подсказка с полным путем. (на случай когда в разных папках есть файлы с одинаковым именем)

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 15.10.2004 (Пт) 7:34

Код: Выделить всё
Private Declare Function PathRelativePathTo Lib "shlwapi.dll" Alias "PathRelativePathToA" (ByVal pszPath As String, ByVal pszFrom As String, ByVal dwAttrFrom As Long, ByVal pszTo As String, ByVal dwAttrTo As Long) As Long

Parameters
pszPath
[out] Pointer to a string that receives the relative path. This buffer is assumed to be at least MAX_PATH characters in size.
pszFrom
[in] Pointer to a null-terminated string of maximum length MAX_PATH that contains the path that defines the start of the relative path.
dwAttrFrom
[in] File attributes of pszFrom. If this value contains FILE_ATTRIBUTE_DIRECTORY, pszFrom is assumed to be a directory; otherwise, pszFrom is assumed to be a file.
pszTo
[in] Pointer to a null-terminated string of maximum length MAX_PATH that contains the path that defines the endpoint of the relative path.
dwAttrTo
[in] File attributes of pszTo. If this value contains FILE_ATTRIBUTE_DIRECTORY, pszTo is assumed to be directory; otherwise, pszTo is assumed to be a file.

Return Value
Returns TRUE if successful, or FALSE otherwise.


Remarks
This function takes a pair of paths and generates a relative path from one to the other. The paths do not have to be fully-qualified, but they must have a common prefix, or the function will fail and return FALSE.

For example, let the starting point, pszFrom, be "c:\FolderA\FolderB\FolderC", and the ending point, pszTo, be "c:\FolderA\FolderD\FolderE". PathRelativePathTo will return the relative path from pszFrom to pszTo as: "..\..\FolderD\FolderE". You will get the same result if you set pszFrom to "\FolderA\FolderB\FolderC" and pszTo to "\FolderA\FolderD\FolderE". On the other hand, "c:\FolderA\FolderB" and "a:\FolderA\FolderD do not share a common prefix, and the function will fail. Note that "\\" is not considered a prefix and is ignored. If you set pszFrom to "\\FolderA\FolderB", and pszTo to "\\FolderC\FolderD", the function will fail.
الفيجوال بيسك الرابح

Пред.

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

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

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

    TopList