如何在Rust中列出目录的文件?

Gra*_*Lee 36 rust

如何列出Rust中目录的所有文件?我正在寻找相当于以下Python代码.

files = os.listdir('./')
Run Code Online (Sandbox Code Playgroud)

Kai*_*ren 61

这是一个例子:

use std::fs;

fn main() {
    let paths = fs::read_dir("./").unwrap();

    for path in paths {
        println!("Name: {}", path.unwrap().path().display())
    }
}
Run Code Online (Sandbox Code Playgroud)

它将简单地遍历文件并打印出他们的名字.

  • 哇,它甚至第一次在 Rust 中编译;) (7认同)

Dou*_*oug 13

你也可以使用glob,它明确地用于此目的.

extern crate glob;
use self::glob::glob;

let files:Vec<Path> = glob("*").collect();
Run Code Online (Sandbox Code Playgroud)

  • 这不再起作用:``特征绑定`[u8]:std :: marker :: Sized`在`std :: path :: Path`中不满意(在`std :: path :: Path`中,特性`std :: marker :: Sized`没有实现`[u8]`)[E0277]`[u8]`没有在编译时[E0277]已知的常量大小,因为它出现在类型` `std :: vec :: Vec` [E0277]所需的std :: path :: Path` [E0277]` (4认同)
  • Glob 对我来说工作得很好,只需使用自述文件中的示例即可。 (2认同)

was*_*mup 8

这可以通过glob. 在操场上试试这个

extern crate glob;
use glob::glob;
fn main() {
    for e in glob("../*").expect("Failed to read glob pattern") {
        println!("{}", e.unwrap().display());
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能会看到来源


对于递归遍历目录,您可以使用walkdir板条箱 ( Playground ):

extern crate walkdir;
use walkdir::WalkDir;
fn main() {
    for e in WalkDir::new(".").into_iter().filter_map(|e| e.ok()) {
        if e.metadata().unwrap().is_file() {
            println!("{}", e.path().display());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅The Rust CookbookDirectory Traversal部分。