saw*_*awa 1 ruby file path relative-path absolute-path
可以通过以下方法将相foo对于参考点的相对路径bar转换为绝对路径baz:
baz = File.expand_path(foo, bar)
Run Code Online (Sandbox Code Playgroud)
如何做到相反呢?换句话说,给定绝对路径baz和参考点bar(作为绝对路径),如何将其转换foo为如下所示的相对路径?
foo = File.relative_path(baz, bar)
Run Code Online (Sandbox Code Playgroud)
请假设所有给定的路径在没有/目录的情况下都经过规范化处理(如果它们是目录):
"/foo/bar"
"/foo/bar/" # No need to consider
Run Code Online (Sandbox Code Playgroud)
这同样适用于所有返回的路径。
请注意,这并不像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"
Run Code Online (Sandbox Code Playgroud)
我相信Pathname#relative_path_from这就是您要寻找的。看到我给另一个问题的答案。
require 'pathname'
first = Pathname.new '/first/path'
second = Pathname.new '/second/path'
relative = second.relative_path_from first
# ../../second/path
first + relative
# /second/path
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |