Path
構造体Path
は、ファイルシステム中のパスを表します。Path
には2つの変種があります。UNIXライクなファイルシステムのためのposix::Path
と、Windows用のwindows::Path
です。それぞれプラットフォームに対応したPath
をエクスポートします。
Path
はOsStr
から作ることができます。そうすればそのパスが指すファイル・ディレクトリの情報を取得するためのメソッドがいくつか使えるようになります。
Path
はイミュータブルです。Path
の所有権ありのバージョンがPathBuf
です。
Path
とPathBuf
の関係は、str
とString
の関係に似ています。
PathBuf
はそのまま変更でき、Path
にデリファレンスすることができます。
Path
の実態はUTF-8の文字列 ではなく 、OsString
であることに注意しましょう。したがって、Path
を&str
に変換するのは無条件 ではなく 、失敗する可能性があります。それゆえOption
型が返されます。
しかしPath
からOsString
あるいは&OsStr
への変換はそれぞれinto_os_string
とas_os_str
によって無条件でできます。
use std::path::Path; fn main() { // Create a `Path` from an `&'static str` // `&'static str`から`Path`を作成 let path = Path::new("."); // The `display` method returns a `Display`able structure // `display`メソッドは`Display`可能な構造体を返す。 let _display = path.display(); // `join` merges a path with a byte container using the OS specific // separator, and returns a `PathBuf` // `join`はOS固有のセパレータによってバイトのコンテナ型であるパス // を結合し、`PathBuf`を返す。 let mut new_path = path.join("a").join("b"); // `push` extends the `PathBuf` with a `&Path` // `push`は`PathBuf`を`&Path`で拡張する。 new_path.push("c"); new_path.push("myfile.tar.gz"); // `set_file_name` updates the file name of the `PathBuf` // `set_file_name`は`PathBuf`のファイル名を更新する。 new_path.set_file_name("package.tgz"); // Convert the `PathBuf` into a string slice // `PathBuf`を文字列のスライスに変換する。 match new_path.to_str() { None => panic!("new path is not a valid UTF-8 sequence"), Some(s) => println!("new path is {}", s), } }
他のPath
メソッド(posix::Path
とwindows::Path
)をチェックするのを忘れずに!それとMetadata
構造体も見ておくことをオススメします。