Относительный путь - в абсолютный

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Относительный путь - в абсолютный

Post by Тигрёнок »

Чего-то я туплю...
Подскажите, пожалуйста, есть ли в Win или FAR API какая-то стандартная функция для преобразования относительных путей (типа Dir, ..\Dir или \Dir) в абсолютные (типа C:\Dir)?
Съешь мыша – стань настоящим клавишником!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

WinAPI: PathCanonicalize
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

Skirda
Спасибо, я про эту функцию не знал.
Но, увы, ни с путями "..\Dir", ни с путями типа "\Dir" она не справляется, выдывая вместо полного пути в ответ "\Dir", что в первом случае вообще ошибка.
Съешь мыша – стань настоящим клавишником!
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

Тигрёнок
Это конечно не FarAPI и не WinAPI, но в C Run-Time Library есть _fullpath.
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

HaRT
Мерси, но я пишу на Delphi...
Мне, в конце концов, и самому не трудно такую функцию написать, но неужели ничего стандартного нет?
Съешь мыша – стань настоящим клавишником!
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Post by Shmuel »

WinAPI: GetFullPathName
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

Shmuel
Мур-рси!
Я же знал, что оно как-то просто, но только не знал как...
Съешь мыша – стань настоящим клавишником!
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

Тигрёнок
Радоваться рано. Судя по документации, эта функция принимает только имя файла, а не относительный путь. К тому же я не уверен, как она воспримет имя отсутствующего файла. В силу этих причин я её и не предложил.
Однако если я ошибаюсь в её отношении, рад буду узнать об этом тут. ;)
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Post by zg »

HaRT wrote:Судя по документации, эта функция принимает только имя файла, а не относительный путь.
документацию до конца читать надо:
GetFullPathName merges the name of the current drive and directory with the specified file name to determine the full path and file name of the specified file. It also calculates the address of the file name portion of the full path and file name. This function does not verify that the resulting path and file name are valid or that they refer to an existing file on the associated volume.
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

HaRT
Я прежде чем говорить пасибо потыкался - вроде все работает нормально.
Съешь мыша – стань настоящим клавишником!
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

zg
Уел… :oops:
По результатам экспериментов эта функция делает как раз то, что требуется.
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Post by Centaur »

Единственное, чего в ней не хватает — это работы относительно заданного пути, а не только текущего каталога. А иногда хочется.
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

Centaur
Меняй текущий каталог
Съешь мыша – стань настоящим клавишником!
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Post by Centaur »

Тигрёнок
Текущий каталог — свойство процесса. То есть, если я его меняю, я подкладываю свинью другим потокам, живущим в том же процессе. Поэтому я бы предпочёл не трогать его без особых на то причин. И простая строковая операция над путями — не есть достаточное обоснование.
User avatar
Тигрёнок
Posts: 391
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Post by Тигрёнок »

Centaur
Гм! А ведь верно...
Паскудное наследство DOS всплывает в самых неожиданных местах...
:o
Съешь мыша – стань настоящим клавишником!
Post Reply

Return to “Разработка плагинов”