Path and Filesystem Models
Path File Parts
Read Name and Extension
Path can inspect filename-shaped text without opening or reading from the filesystem.
Program
Play the program to choose a path string and inspect its final name and extension.
path_file_parts.rs
Replay: real traced execution (multi-file project)
use std::path::Path;
fn main() {
let raw = "src/main.rs";
let path = Path::new(raw);
let file = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");
let ext = path.extension().and_then(|name| name.to_str()).unwrap_or("none");
println!("{file}:{ext}");
}
use std::path::Path;
fn main() {
let raw = "README.md";
let path = Path::new(raw);
let file = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");
let ext = path.extension().and_then(|name| name.to_str()).unwrap_or("none");
println!("{file}:{ext}");
}
use std::path::Path;
fn main() {
let raw = "src/lib";
let path = Path::new(raw);
let file = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");
let ext = path.extension().and_then(|name| name.to_str()).unwrap_or("none");
println!("{file}:{ext}");
}
raw ← "src/main.rs", path ← "src/main.rs", file ← "main.rs", ext ← "rs"
3fn main() {4 let ra→ "src/main.rs"w = "src/main.rs"; //@raw="src/main.rs", "README.md", "src/lib"5 let pat→ "src/main.rs"h = Path::new(ra"src/main.rs"w);6 let fil→ "main.rs"e = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");7 let ex→ "rs"t = path.extension().and_then(|name| name.to_str()).unwrap_or("none");8 println!("{file}:{ext}");9}outputmain.rs:rs
raw ← "README.md", path ← "README.md", file ← "README.md", ext ← "md"
3fn main() {4 let ra→ "README.md"w = "README.md";5 let pat→ "README.md"h = Path::new(ra"README.md"w);6 let fil→ "README.md"e = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");7 let ex→ "md"t = path.extension().and_then(|name| name.to_str()).unwrap_or("none");8 println!("{file}:{ext}");9}outputREADME.md:md
raw ← "src/lib", path ← "src/lib", file ← "lib", ext ← "none"
3fn main() {4 let ra→ "src/lib"w = "src/lib";5 let pat→ "src/lib"h = Path::new(ra"src/lib"w);6 let fil→ "lib"e = path.file_name().and_then(|name| name.to_str()).unwrap_or("none");7 let ex→ "none"t = path.extension().and_then(|name| name.to_str()).unwrap_or("none");8 println!("{file}:{ext}");9}outputlib:none
Path
`Path::new` treats a string as path-shaped data without touching the filesystem.
file_name
`file_name` returns the last component when one is present.
extension
`extension` returns the text after the last dot in the filename.