Path and Filesystem Models
Set Path Extension
Retarget an Output File
PathBuf can update path-shaped data in memory before a program decides where to write.
Program
Play the program to choose an output extension and update the report path.
set_path_extension.rs
Replay: real traced execution (multi-file project)
use std::path::PathBuf;
fn main() {
let extension = "json";
let mut path = PathBuf::from("report.tmp");
path.set_extension(extension);
println!("{}", path.display());
}
use std::path::PathBuf;
fn main() {
let extension = "csv";
let mut path = PathBuf::from("report.tmp");
path.set_extension(extension);
println!("{}", path.display());
}
use std::path::PathBuf;
fn main() {
let extension = "txt";
let mut path = PathBuf::from("report.tmp");
path.set_extension(extension);
println!("{}", path.display());
}
extension ← "json", path ← "report.tmp"
3fn main() {4 let extensio→ "json"n = "json"; //@extension="json", "csv", "txt"5 let mut pat→ "report.tmp"h = PathBuf::from("report.tmp");6 path.set_extension(extension);7 println!("{}", path.display());8}outputreport.json
extension ← "csv", path ← "report.tmp"
3fn main() {4 let extensio→ "csv"n = "csv";5 let mut pat→ "report.tmp"h = PathBuf::from("report.tmp");6 path.set_extension(extension);7 println!("{}", path.display());8}outputreport.csv
extension ← "txt", path ← "report.tmp"
3fn main() {4 let extensio→ "txt"n = "txt";5 let mut pat→ "report.tmp"h = PathBuf::from("report.tmp");6 path.set_extension(extension);7 println!("{}", path.display());8}outputreport.txt
PathBuf
`PathBuf` owns path-shaped data and can be modified.
set_extension
`set_extension` replaces the filename extension in place.
model first
This example models path selection without performing filesystem writes.