Struct std::path::Path 1.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]
fn new<S: AsRef<OsStr> + ?Sized>(s: &S) -> &Path
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 Path
s from String
s, or even other Path
s:
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);
fn as_os_str(&self) -> &OsStr
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"));
fn to_str(&self) -> Option<&str>
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"));
fn to_string_lossy(&self) -> Cow<str>
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");
fn to_path_buf(&self) -> PathBuf
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"));
fn is_absolute(&self) -> bool
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
andhas_root
are equivalent.On Windows, a path is absolute if it has a prefix and starts with the root:
c:\windows
is absolute, whilec:temp
and\temp
are not.
Examples
use std::path::Path; assert!(!Path::new("foo.txt").is_absolute());
fn is_relative(&self) -> bool
A path is relative if it is not absolute.
Examples
use std::path::Path; assert!(Path::new("foo.txt").is_relative());
fn has_root(&self) -> bool
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 notc:windows
- has any non-disk prefix, e.g.
\\server\share
- has no prefix and begins with a separator, e.g.
Examples
use std::path::Path; assert!(Path::new("/etc/passwd").has_root());
fn parent(&self) -> Option<&Path>
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);
fn file_name(&self) -> Option<&OsStr>
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());
fn strip_prefix<'a, P: ?Sized>(&'a self,
base: &'a P)
-> Result<&'a Path, StripPrefixError> where P: AsRef<Path>
1.7.0
base: &'a P)
-> Result<&'a Path, StripPrefixError> where P: AsRef<Path>
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);
fn starts_with<P: AsRef<Path>>(&self, base: P) -> bool
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"));
fn ends_with<P: AsRef<Path>>(&self, child: P) -> bool
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"));
fn file_stem(&self) -> Option<&OsStr>
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());
fn extension(&self) -> Option<&OsStr>
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());
fn join<P: AsRef<Path>>(&self, path: P) -> PathBuf
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"));
fn with_file_name<S: AsRef<OsStr>>(&self, file_name: S) -> PathBuf
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"));
fn with_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf
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"));
fn components(&self) -> Components
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)
fn iter(&self) -> Iter
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)
fn display(&self) -> Display
Trait Implementations
impl ToOwned for Path
[src]
type Owned = PathBuf
fn to_owned(&self) -> PathBuf
Creates owned data from borrowed data, usually by cloning. Read more
impl AsRef<OsStr> for Path
[src]
impl Debug for Path
[src]
fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>
Formats the value using the given formatter.
impl PartialEq for Path
[src]
fn eq(&self, other: &Path) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl Hash for Path
[src]
fn hash<H: Hasher>(&self, h: &mut H)
Feeds this value into the state given, updating the hasher as necessary.
fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher
1.3.0
Feeds a slice of this type into the state provided.
impl Eq for Path
[src]
impl PartialOrd for Path
[src]
fn partial_cmp(&self, other: &Path) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn cmp(&self, other: &Path) -> Ordering
This method returns an Ordering
between self
and other
. Read more
impl AsRef<Path> for Path
[src]
impl<'a> IntoIterator for &'a Path
1.6.0[src]
type Item = &'a OsStr
The type of the elements being iterated over.
type IntoIter = Iter<'a>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Iter<'a>
Creates an iterator from a value. Read more
impl<'a, 'b> PartialEq<PathBuf> for Path
1.6.0[src]
fn eq(&self, other: &PathBuf) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<PathBuf> for Path
1.8.0[src]
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &PathBuf) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<PathBuf> for &'a Path
1.8.0[src]
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for Path
1.8.0[src]
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for &'b Path
1.8.0[src]
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<OsStr> for Path
1.8.0[src]
fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &&'a OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<&'a OsStr> for Path
1.8.0[src]
fn partial_cmp(&self, other: &&'a OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for Path
1.8.0[src]
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &OsString) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<OsString> for Path
1.8.0[src]
fn partial_cmp(&self, other: &OsString) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<OsStr> for &'a Path
1.8.0[src]
fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &Cow<'b, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<Cow<'b, OsStr>> for &'a Path
1.8.0[src]
fn partial_cmp(&self, other: &Cow<'b, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
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]
fn eq(&self, other: &OsString) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<OsString> for &'a Path
1.8.0[src]
fn partial_cmp(&self, other: &OsString) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more