为什么联接路径会完全替代Rust中的原始路径?

时间:2018-11-22 11:50:35

标签: rust filepath

我不明白Rust如何连接文件路径。为什么这样不起作用:

fn main() {
    let root = std::path::Path::new("resources/");
    let uri = std::path::Path::new("/js/main.js");
    let path = root.join(uri);
    assert_eq!(path.to_str(), Some("resources/js/main.js"));
}

失败:

thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `Some("/js/main.js")`,
 right: `Some("resources/js/main.js")`', src/main.rs:5:5

我在the docs中看到“推绝对路径将替换现有路径”,但这似乎是一个可怕的想法,将吸引很多人。

在这种情况下,如何安全地剥离绝对路径或使其相对?

1 个答案:

答案 0 :(得分:5)

这是因为"/js/main.js"被视为绝对路径(doc

  

如果path是绝对路径,它将替换当前路径。

     

在Windows上:

     
      
  • 如果path具有根但没有前缀(例如\ windows),则它将替换self的前缀(如果有)之外的所有内容。
  •   
  • 如果path有前缀但没有根,它将替换self
  •   

如果将示例更改为"js/main.js",然后使用join,它将被正确构造(playground