gpt4 book ai didi

ruby - 将绝对路径转换为相对路径

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:29 24 4
gpt4 key购买 nike

将相对于引用点 bar 的相对路径 foo 转换为绝对路径 baz 可以通过以下方式完成:

baz = File.expand_path(foo, bar)

如何做相反的事情?换句话说,给定一个绝对路径 baz 和引用点 bar(给定为绝对路径),如何将其转换为相对路径 foo 如下所示?

foo = File.relative_path(baz, bar)

请假设所有给定的路径都是规范化的,因为如果它们是目录,它们不会以 / 结尾:

"/foo/bar"
"/foo/bar/" # No need to consider

这同样适用于所有返回的路径。

请注意,这并不像从 baz 的初始部分剥离 bar 并将其替换为 ./ 那样简单,因为 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"

最佳答案

我相信Pathname#relative_path_from是你要找的。参见 this answer我给了另一个问题。

require 'pathname'

first = Pathname.new '/first/path'
second = Pathname.new '/second/path'

relative = second.relative_path_from first
# ../../second/path

first + relative
# /second/path

关于ruby - 将绝对路径转换为相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com