PathBuf
https://zenn.dev/suzuki_hoge/books/2023-03-rust-strings-8868f207b3ed18/viewer/5-path-buf-and-path
https://doc.rust-lang.org/std/path/struct.PathBuf.html
file pathを安全に扱うための型
内部はOsString
pathを便利に扱うためのmethodが生えている
code:rs
use std::path::PathBuf;
fn main() {
let mut path = PathBuf::from("/home/user");
path.push("documents");
path.push("file.txt");
println!("{:?}", path); // "/home/user/documents/file.txt"
}
拡張子の取得
code:rs
fn main() {
let path = PathBuf::from("example.tar.gz");
if let Some(ext) = path.extension() {
println!("拡張子: {:?}", ext);
}
}
親ディレクトリの取得
code:rs
fn main() {
let path = PathBuf::from("/home/user/documents/file.txt");
if let Some(parent) = path.parent() {
println!("親ディレクトリ: {:?}", parent);
}
}
絶対pathに変換
code:rs
fn main() {
let path = PathBuf::from("file.txt");
match path.canonicalize() {
Ok(absolute_path) => println!("絶対パス: {:?}", absolute_path),
Err(e) => eprintln!("エラー: {:?}", e),
}
}
PathBufと&Pathの関係は、
Stringと&strと同じ
雑認識
一般的には、&Pathを使うが、pathを変更するならPathBufを使う