Path や PathBuf 構造体が備えている 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);
}