Struct std::path::Path1.0.0 [] [src]

pub struct Path { /* fields omitted */ }

A slice of a path (akin to str).

This type supports a number of operations for inspecting a path, including breaking the path into its components (separated by / or \, depending on the platform), extracting the file name, determining whether the path is absolute, and so on.

This is an unsized type, meaning that it must always be used behind a pointer like & or Box. For an owned version of this type, see PathBuf.

More details about the overall approach can be found in the module documentation.

Examples

use std::path::Path;

let path = Path::new("/tmp/foo/bar.txt");
let file = path.file_name();
let extension = path.extension();
let parent_dir = path.parent();

Methods

impl Path
[src]

Directly wrap a string slice as a Path slice.

This is a cost-free conversion.

Examples

use std::path::Path;

Path::new("foo.txt");

You can create Paths from Strings, or even other Paths:

use std::path::Path;

let string = String::from("foo.txt");
let from_string = Path::new(&string);
let from_path = Path::new(&from_string);
assert_eq!(from_string, from_path);

Yields the underlying OsStr slice.

Examples

use std::path::Path;

let os_str = Path::new("foo.txt").as_os_str();
assert_eq!(os_str, std::ffi::OsStr::new("foo.txt"));

Yields a &str slice if the Path is valid unicode.

This conversion may entail doing a check for UTF-8 validity.

Examples

use std::path::Path;

let path_str = Path::new("foo.txt").to_str();
assert_eq!(path_str, Some("foo.txt"));

Converts a Path to a Cow<str>.

Any non-Unicode sequences are replaced with U+FFFD REPLACEMENT CHARACTER.

Examples

use std::path::Path;

let path_str = Path::new("foo.txt").to_string_lossy();
assert_eq!(path_str, "foo.txt");

Converts a Path to an owned PathBuf.

Examples

use std::path::Path;

let path_buf = Path::new("foo.txt").to_path_buf();
assert_eq!(path_buf, std::path::PathBuf::from("foo.txt"));

A path is absolute if it is independent of the current directory.

  • On Unix, a path is absolute if it starts with the root, so is_absolute and has_root are equivalent.

  • On Windows, a path is absolute if it has a prefix and starts with the root: c:\windows is absolute, while c:temp and \temp are not.

Examples

use std::path::Path;

assert!(!Path::new("foo.txt").is_absolute());

A path is relative if it is not absolute.

Examples

use std::path::Path;

assert!(Path::new("foo.txt").is_relative());

A path has a root if the body of the path begins with the directory separator.

  • On Unix, a path has a root if it begins with /.

  • On Windows, a path has a root if it:

    • has no prefix and begins with a separator, e.g. \\windows
    • has a prefix followed by a separator, e.g. c:\windows but not c:windows
    • has any non-disk prefix, e.g. \\server\share

Examples

use std::path::Path;

assert!(Path::new("/etc/passwd").has_root());

The path without its final component, if any.

Returns None if the path terminates in a root or prefix.

Examples

use std::path::Path;

let path = Path::new("/foo/bar");
let parent = path.parent().unwrap();
assert_eq!(parent, Path::new("/foo"));

let grand_parent = parent.parent().unwrap();
assert_eq!(grand_parent, Path::new("/"));
assert_eq!(grand_parent.parent(), None);

The final component of the path, if it is a normal file.

If the path terminates in .., file_name will return None.

Examples

use std::path::Path;
use std::ffi::OsStr;

let path = Path::new("foo.txt");
let os_str = OsStr::new("foo.txt");

assert_eq!(Some(os_str), path.file_name());

Other examples

use std::path::Path;
use std::ffi::OsStr;

assert_eq!(Some(OsStr::new("foo.txt")), Path::new("foo.txt/.").file_name());
assert_eq!(Some(OsStr::new("foo.txt")), Path::new("foo.txt/.//").file_name());
assert_eq!(None, Path::new("foo.txt/..").file_name());

Returns a path that, when joined onto base, yields self.

Errors

If base is not a prefix of self (i.e. starts_with returns false), returns Err.

Examples

use std::path::Path;

let path = Path::new("/test/haha/foo.txt");

assert_eq!(path.strip_prefix("/test"), Ok(Path::new("haha/foo.txt")));
assert_eq!(path.strip_prefix("test").is_ok(), false);
assert_eq!(path.strip_prefix("/haha").is_ok(), false);

Determines whether base is a prefix of self.

Only considers whole path components to match.

Examples

use std::path::Path;

let path = Path::new("/etc/passwd");

assert!(path.starts_with("/etc"));

assert!(!path.starts_with("/e"));

Determines whether child is a suffix of self.

Only considers whole path components to match.

Examples

use std::path::Path;

let path = Path::new("/etc/passwd");

assert!(path.ends_with("passwd"));

Extracts the stem (non-extension) portion of self.file_name().

The stem is:

  • None, if there is no file name;
  • The entire file name if there is no embedded .;
  • The entire file name if the file name begins with . and has no other .s within;
  • Otherwise, the portion of the file name before the final .

Examples

use std::path::Path;

let path = Path::new("foo.rs");

assert_eq!("foo", path.file_stem().unwrap());

Extracts the extension of self.file_name(), if possible.

The extension is:

  • None, if there is no file name;
  • None, if there is no embedded .;
  • None, if the file name begins with . and has no other .s within;
  • Otherwise, the portion of the file name after the final .

Examples

use std::path::Path;

let path = Path::new("foo.rs");

assert_eq!("rs", path.extension().unwrap());

Creates an owned PathBuf with path adjoined to self.

See PathBuf::push for more details on what it means to adjoin a path.

Examples

use std::path::{Path, PathBuf};

assert_eq!(Path::new("/etc").join("passwd"), PathBuf::from("/etc/passwd"));

Creates an owned PathBuf like self but with the given file name.

See PathBuf::set_file_name for more details.

Examples

use std::path::{Path, PathBuf};

let path = Path::new("/tmp/foo.txt");
assert_eq!(path.with_file_name("bar.txt"), PathBuf::from("/tmp/bar.txt"));

Creates an owned PathBuf like self but with the given extension.

See PathBuf::set_extension for more details.

Examples

use std::path::{Path, PathBuf};

let path = Path::new("foo.rs");
assert_eq!(path.with_extension("txt"), PathBuf::from("foo.txt"));

Produce an iterator over the components of the path.

Examples

use std::path::{Path, Component};
use std::ffi::OsStr;

let mut components = Path::new("/tmp/foo.txt").components();

assert_eq!(components.next(), Some(Component::RootDir));
assert_eq!(components.next(), Some(Component::Normal(OsStr::new("tmp"))));
assert_eq!(components.next(), Some(Component::Normal(OsStr::new("foo.txt"))));
assert_eq!(components.next(), None)

Produce an iterator over the path's components viewed as OsStr slices.

Examples

use std::path::{self, Path};
use std::ffi::OsStr;

let mut it = Path::new("/tmp/foo.txt").iter();
assert_eq!(it.next(), Some(OsStr::new(&path::MAIN_SEPARATOR.to_string())));
assert_eq!(it.next(), Some(OsStr::new("tmp")));
assert_eq!(it.next(), Some(OsStr::new("foo.txt")));
assert_eq!(it.next(), None)

Returns an object that implements Display for safely printing paths that may contain non-Unicode data.

Examples

use std::path::Path;

let path = Path::new("/tmp/foo.rs");

println!("{}", path.display());

Trait Implementations

impl ToOwned for Path
[src]

Creates owned data from borrowed data, usually by cloning. Read more

impl AsRef<OsStr> for Path
[src]

Performs the conversion.

impl Debug for Path
[src]

Formats the value using the given formatter.

impl PartialEq for Path
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl Hash for Path
[src]

Feeds this value into the state given, updating the hasher as necessary.

Feeds a slice of this type into the state provided.

impl Eq for Path
[src]

impl PartialOrd for Path
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl Ord for Path
[src]

This method returns an Ordering between self and other. Read more

impl AsRef<Path> for Path
[src]

Performs the conversion.

impl<'a> IntoIterator for &'a Path
1.6.0
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<'a, 'b> PartialEq<PathBuf> for Path
1.6.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<PathBuf> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<PathBuf> for &'a Path
1.6.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<PathBuf> for &'a Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<Cow<'a, Path>> for Path
1.6.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<Cow<'a, Path>> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<Cow<'a, Path>> for &'b Path
1.6.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<Cow<'a, Path>> for &'b Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<OsStr> for Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<OsStr> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<&'a OsStr> for Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<&'a OsStr> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<OsString> for Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<OsString> for Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<OsStr> for &'a Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<OsStr> for &'a Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<Cow<'b, OsStr>> for &'a Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<Cow<'b, OsStr>> for &'a Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, 'b> PartialEq<OsString> for &'a Path
1.8.0
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b> PartialOrd<OsString> for &'a Path
1.8.0
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more