给出相对路径:
PathBuf::from("./cargo_home")
是否有获取绝对路径的方法?
Rust 1.5.0添加了std::fs::canonicalize
,听起来很接近您想要的内容:
返回规范化所有中间组件且解析符号链接的路径的规范形式。
注意,与接受的答案不同,这将从返回的路径中删除std::fs::canonicalize
。
我机器上的一个简单示例:
./
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")
条板箱和path-clean很好地完成此操作。与其他答案相比,此方法的好处在于它可以解析std::env::current_dir
和std::env::current_dir
,即使路径不存在也可以使用。
.
如果我正确理解PathBuf文档,则不会将..
视为表示其相对路径的特殊开头。
但是您可以使用use std::env;
use std::io;
use std::path::{PathBuf, Path};
use path_clean::PathClean;
pub fn absolute_path<P>(path: P) -> io::Result<PathBuf>
where
P: AsRef<Path>,
{
let path = path.as_ref();
let absolute_path = if path.is_absolute() {
path.to_path_buf()
} else {
env::current_dir()?.join(path)
}.clean();
Ok(absolute_path)
}
将相对路径变成绝对路径:
"./"
这假设您的相对路径是相对于当前目录的。