🔬This is a nightly-only experimental API. (
absolute_path
#92750)Expand description
Makes the path absolute without accessing the filesystem.
If the path is relative, the current directory is used as the base directory.
All intermediate components will be resolved according to platforms-specific
rules but unlike canonicalize
this does not
resolve symlinks and may succeed even if the path does not exist.
If the path
is empty or getting the
current directory fails then an error will be
returned.
Examples
Posix paths
#![feature(absolute_path)]
fn main() -> std::io::Result<()> {
use std::path::{self, Path};
// Relative to absolute
let absolute = path::absolute("foo/./bar")?;
assert!(absolute.ends_with("foo/bar"));
// Absolute to absolute
let absolute = path::absolute("/foo//test/.././bar.rs")?;
assert_eq!(absolute, Path::new("/foo/test/../bar.rs"));
Ok(())
}
RunThe path is resolved using POSIX semantics except that
it stops short of resolving symlinks. This means it will keep ..
components and trailing slashes.
Windows paths
#![feature(absolute_path)]
fn main() -> std::io::Result<()> {
use std::path::{self, Path};
// Relative to absolute
let absolute = path::absolute("foo/./bar")?;
assert!(absolute.ends_with(r"foo\bar"));
// Absolute to absolute
let absolute = path::absolute(r"C:\foo//test\..\./bar.rs")?;
assert_eq!(absolute, Path::new(r"C:\foo\bar.rs"));
Ok(())
}
RunFor verbatim paths this will simply return the path as given. For other
paths this is currently equivalent to calling GetFullPathNameW
This may change in the future.