pub fn absolute<P: AsRef<Path>>(path: P) -> Result<PathBuf>
🔬This is a nightly-only experimental API. (
absolute_path
#92750)Expand description
在不访问文件系统的情况下使路径成为绝对路径。
如果路径是相对的,则将当前目录用作基本目录。
所有中间组件都将根据特定于平台的规则进行解析,但与 canonicalize
不同,它不会解析符号链接,即使路径不存在也可能成功。
如果 path
为空或获取 current directory 失败,则返回错误。
Examples
Posix 路径
#![feature(absolute_path)]
fn main() -> std::io::Result<()> {
use std::path::{self, Path};
// 相对于绝对
let absolute = path::absolute("foo/./bar")?;
assert!(absolute.ends_with("foo/bar"));
// 绝对到绝对
let absolute = path::absolute("/foo//test/.././bar.rs")?;
assert_eq!(absolute, Path::new("/foo/test/../bar.rs"));
Ok(())
}
Run该路径是使用 POSIX semantics 解析的,只是它没有解析符号链接。这意味着它将保留 ..
组件和尾部斜杠。
Windows 路径
#![feature(absolute_path)]
fn main() -> std::io::Result<()> {
use std::path::{self, Path};
// 相对于绝对
let absolute = path::absolute("foo/./bar")?;
assert!(absolute.ends_with(r"foo\bar"));
// 绝对到绝对
let absolute = path::absolute(r"C:\foo//test\..\./bar.rs")?;
assert_eq!(absolute, Path::new(r"C:\foo\bar.rs"));
Ok(())
}
Run对于逐字路径,这将简单地返回给定的路径。对于其他路径,这目前相当于调用 GetFullPathNameW
这可能会在 future 中发生变化。