Rustでファイルパスを扱う際のパスの取り扱いについて、メモ

広告

基本的にstd::path::{Path, PathBuf}で扱える

 ファイルパスを取り扱う場合、std::pathのPathもしくはPathBufを使います。
 ファイルオープンなど行う場合も、この二つをファイルへのパスとして引数にいれることができます。
 ちなみにメソッドは、PathにあるものはだいたいPathBufにもあり、同じように扱えます。

PathとPathBufについて

違い

 PathとPathBufの違いは、一言でいえば、不変か、可変か、です。[ドキュメント]( https://doc.rust-lang.org/std/path/index.html )にも書いてありますが、strとStringのような違いのようなものです。
 ですので例えば、ファイルパスを次々生成していって、再代入、というような引き回しかたをする場合、PathBufを用いると便利です。というか、Pathでjoinメソッドを使うとPathBufが返るので、つまりそういうことだと思います。

メソッドについて

 メソッドは前述したとおり、PathにあるメソッドはだいたいPathBufにもあります。
 ちなみにPathBufでは、パスを次々に足していきたい場合はpushで追加していくことができます。

生成方法

 Pathはnew時にファイルパスを放り込みます。

let str = [ファイルパス];
let path = Path::new(str);

 一方、PathBufはいろんな感じで生成できます。

//空のPathBufの生成
let mut path = PathBuf::new();
path.push(r"C:\");
path.push(ディレクトリ名)
…

//Pathからよしなに生成(以下の例ではpathにPathを格納)
let mut path_buf = PathBuf::from(path)
//この後、pushでパスをつなげていくこともできる

//文字列から生成も可能
let mut path_buf = PathBuf::from(str)

相互変換

 PathBufからPathへの変換にはas_path()を、PathをPathBufに変換するにはto_path_buf()が使えます。

let path = path_buf.as_path().unwrap();
//もしくは文字列を経由も一応できる
let str = path_buf.to_str().unwrap();
let path = Path::new(str);

let mut path_buf = path.to_path_buf();

その他

 未熟な私ではPathの方を取りまわすのにあまり自信がなく、PathBufを結構使っています。可変ということもあってか、とても便利です。

広告

関連コンテンツと広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA