The Path struct represents file paths in the underlying filesystem. There are
two flavors of Path: posix::Path, for UNIX-like systems, and
windows::Path, for Windows. The prelude exports the appropriate
platform-specific Path variant.
A Path can be created from almost any type that implements the
BytesContainer trait, like a string, and provides several methods to get
information from the file/directory the path points to.
Note that a Path is not internally represented as an UTF-8 string, but
instead is stored as a vector of bytes (Vec<u8>). Therefore, converting a
Path to a &str is not free and may fail (an Option is returned).
use std::io::fs::PathExtensions;
fn main() {
// Create a `Path` from an `&'static str`
let path = Path::new(".");
// The `display` method returns a `Show`able structure
let display = path.display();
// Check if the path exists
if path.exists() {
println!("{} exists", display);
}
// Check if the path is a file
if path.is_file() {
println!("{} is a file", display);
}
// Check if the path is a directory
if path.is_dir() {
println!("{} is a directory", display);
}
// `stat` returns an IoResult<FileStat> === Result<FileStat, IoError>
let stat = match path.stat() {
Err(why) => panic!("{}", why.desc),
Ok(stat) => stat,
};
println!("{} size is {} bytes", display, stat.size);
// `join` merges a path with a byte container using the OS specific
// separator, and returns the new path
let new_path = path.join("a").join("b");
// Convert the path into a string slice
match new_path.as_str() {
None => panic!("new path is not a valid UTF-8 sequence"),
Some(s) => println!("new path is {}", s),
}
}