如何检查给定路径是文件还是目录?

XAM*_*cky 5 directory file-io file path rust

我正在构建一个应该能够同时获取文件(*.*)和目录(./,..)的路径的程序.我希望能够检查提供的路径是文件还是目录.

fjh*_*fjh 11

你应该使用std::fs::metadata:

use std::fs::metadata;

fn main() {
    let md = metadata(".").unwrap();
    println!("is dir: {}", md.is_dir());
    println!("is file: {}", md.is_file());
}
Run Code Online (Sandbox Code Playgroud)

输出:

is dir: true
is file: false
Run Code Online (Sandbox Code Playgroud)

  • @Shepmaster是的,但公平地说,第二个结果是`PathExt :: is_dir`,这是不稳定的,因此可能不是提问者正在寻找的,即使它也做他们想要的. (3认同)
  • 这就是为什么我说"合理"而不是"伟大".^ _ ^希望只会变得更好!我主要想指出API参考也是一个很好的资源. (2认同)

gil*_*des 7

截至rustc 1.67.1 (d5a82bbd2 2023-02-07)您可以使用std::path::PathBuf

let path = PathBuf::from(".");
let is_dir = path.is_dir();
let is_file = path.is_file();
println!("is_dir: {is_dir}");
println!("is_file : {is_file}");
Run Code Online (Sandbox Code Playgroud)

这是使用 REPL 执行代码时的输出:

Welcome to evcxr. For help, type :help
>> use std::path::PathBuf;
>> let path = PathBuf::from(".");
>> let is_dir = path.is_dir();
>> let is_file = path.is_file();
>> println!("is_dir: {is_dir}");
is_dir: true
>> println!("is_file : {is_file}");
is_file : false
Run Code Online (Sandbox Code Playgroud)