将当前目录中的所有文件内容读取到向量中

问题描述 投票:1回答:1

我想读取当前目录中的所有文件。

这是我的进度:

use std::fs;

fn main() {
    let files = fs::read_dir(".").unwrap();
    files
        .filter_map(Result::ok)
        .filter(|d| if let Some(e) = d.path().extension() { e == "txt" } else {false})
        .for_each(|f| println!("{:?}", f));
}

这里我有点迷路,如何读取所有文件内容?是否应该将它们添加到Vec块中不断增长的for_each中?如果是,那怎么办?

rust
1个回答
0
投票

如果您要使用单个vec,所有文件的字节都在一个内,则可以使用

let target_ext = OsString::from("txt");
let files = fs::read_dir(".").unwrap();
let file_bytes : Vec<u8> = files
    .filter_map(Result::ok)
    .map(|d| d.path())
    .filter(|path| path.extension() == Some(&target_ext))
    .flat_map(|path| fs::read(path).expect("Failed to read"))
    .collect();

[如果您想要一个包含每个文件内容的vec,分别从flat_mapmap,它将返回Vec<Vec<u8>>

let file_bytes : Vec<Vec<u8>> = files
    .filter_map(Result::ok)
    .map(|d| d.path())
    .filter(|path| path.extension() == Some(&target_ext))
    .map(|path| fs::read(path).expect("Failed to read"))
    .collect();
© www.soinside.com 2019 - 2024. All rights reserved.