Rust 1.5.0 added std::fs::canonicalize
, which sounds pretty close to what you want:
Returns the canonical form of a path with all intermediate components normalized and symbolic links resolved.
Note that, unlike the accepted answer, this removes the ./
from the returned path.
A simple example from my machine:
use std::fs;
use std::path::PathBuf;
fn main() {
let srcdir = PathBuf::from("./src");
println!("{:?}", fs::canonicalize(&srcdir));
let solardir = PathBuf::from("./../solarized/.");
println!("{:?}", fs::canonicalize(&solardir));
}
Ok("/Users/alexwlchan/Developer/so-example/src")
Ok("/Users/alexwlchan/Developer/solarized")
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…