Преобразования относительного пути foo
относительно опорной точки bar
в абсолютном путь baz
может быть сделано:Преобразование абсолютного пути к относительной одной
baz = File.expand_path(foo, bar)
Как противоположность это может быть сделана? Другими словами, с учетом абсолютного пути baz
и контрольной точки bar
(данный как абсолютный путь), как его можно преобразовать в относительный путь foo
, как показано ниже?
foo = File.relative_path(baz, bar)
Пожалуйста, предположим, что все приведенные пути нормализуются в том смысле, что они не заканчиваются /
в случае, если они являются каталоги:
"/foo/bar"
"/foo/bar/" # No need to consider
и то же самое относится и ко всем вернувшихся путям.
Обратите внимание, что это не так тривиально, как избавление от bar
из начальной части baz
и заменить его ./
, потому что baz
не обязательно является потомок bar
. В общем, ряд ../
должен быть уложен в штабель для достижения общего предка.
Примеры включают, но не ограничиваются ими:
File.relative_path("/foo/bar/quex", "/foo") # => "bar/quex" (preferred) or
# "./bar/quex"
File.relative_path("/foo", "/foo/bar") # => "../"
File.relative_path("/foo/bar", "/baz/quex") # => "../../foo/bar"
Woww .. Какая мысль .. +1 –
Это произошло по необходимости, это не только для любопытства. :) – sawa
hehe ... Still .. * Wooww * .. вы этого заслуживаете. Было бы хорошо, я думаю, подумать обо мне: если вы действительно даете реальный путь в качестве примера. Чтобы мы могли визуализировать ваши потребности. –