ファイルやディレクトリの存在を調べる (std::io::Path, PathBuf)

PathPathBuf 構造体が備えている is_file メソッドや is_dir メソッドを使うと、そのそのパスに対応するファイルやディレクトリが存在するかを調べることができます。 他にも、パスが絶対パスか相対パスかを調べるメソッドなどが用意されています。

メソッド名戻り値の型意味
Path::is_file()boolそのパスが示す ファイルが存在するか を調べます。シンボリックリンクの場合は、リンク先のファイルが存在するかを調べます。ファイルのアクセス権がない場合は、false を返します。
Path::is_dir()boolそのパスが示す ディレクトリが存在するか を調べます。シンボリックリンクの場合は、リンク先のディレクトリが存在するかを調べます。ディレクトリのアクセス権がない場合は、false を返します。
Path::is_symlink()boolそのパスが示す シンボリックファイルが存在するか を調べます。リンク先のファイルやディレクトリが存在するかまではチェックしません(シンボリックリンクが壊れていても true を返します)。
Path::is_absolute()boolそのパスが 絶対パスか を調べます。
Path::is_relative()boolそのパスが 相対パスか を調べます。
Path::has_root()boolそのパスが ルートセパレーターを持つか を調べます(ほぼ is_absolute と同義)。
use std::path::Path;

fn main() {
    // 存在するファイル(相対パス指定)の場合
    let path = Path::new("Cargo.toml");
    assert_eq!(path.is_file(), true);
    assert_eq!(path.is_dir(), false);
    assert_eq!(path.is_symlink(), false);
    assert_eq!(path.is_absolute(), false);
    assert_eq!(path.is_relative(), true);
    assert_eq!(path.has_root(), false);

    // 存在しないファイル(絶対パス指定)の場合
    let path = Path::new("/nonexisting/file/path");
    assert_eq!(path.is_file(), false);
    assert_eq!(path.is_dir(), false);
    assert_eq!(path.is_symlink(), false);
    assert_eq!(path.is_absolute(), true);
    assert_eq!(path.is_relative(), false);
    assert_eq!(path.has_root(), true);
}