ファイルパス
The Path type represents file paths in the underlying filesystem. Across all platforms there is a single std::path::Path that abstracts over platform-specific path semantics and separators. Bring it into scope with use std::path::Path; when needed.
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() {
// `&'static str`から`Path`を作成。
let path = Path::new(".");
// `display`メソッドは`Display`可能な構造体を返します。
let _display = path.display();
// `join`はOS固有のセパレータによってバイトのコンテナ型であるパス
// を結合し、`PathBuf`を返します。
let mut new_path = path.join("a").join("b");
// `push`は`PathBuf`を`&Path`で拡張します。
new_path.push("c");
new_path.push("myfile.tar.gz");
// `set_file_name`は`PathBuf`のファイル名を更新します。
new_path.set_file_name("package.tgz");
// `PathBuf`を文字列のスライスに変換します。
match new_path.to_str() {
None => panic!("new path is not a valid UTF-8 sequence"),
Some(s) => println!("new path is {}", s),
}
}
Be sure to check other Path methods and the Metadata struct.