# Function std::path::absolute

source ·

    pub fn absolute<P: AsRef<Path>>(path: P) -> Result<PathBuf>

🔬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(())
    }

Run

The 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(())
    }

Run

For 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.