如何按扩展名过滤文件名列表?

Fbo*_*GHK 2 rust

我设法读取从一个路径到 a 的所有文件Vec,现在我想按扩展名进行过滤。

let path = Path::new(r"C:\Testpath");
let mut faxvec: Vec<String> = Vec::new();

for element in path.read_dir().unwrap() {
    // if match element
    faxvec.push(element);
}
Run Code Online (Sandbox Code Playgroud)

我只想将文件推送到以“.txt”结尾的向量

bey*_*kay 6

我参加聚会有点晚了,但我觉得这更符合习惯:

fn get_csv_paths(dir: &str) -> Result<Vec<PathBuf>, Box<dyn Error>> {
    let paths = std::fs::read_dir(dir)?
        // Filter out all those directory entries which couldn't be read
        .filter_map(|res| res.ok())
        // Map the directory entries to paths
        .map(|dir_entry| dir_entry.path())
        // Filter out all paths with extensions other than `csv`
        .filter_map(|path| {
            if path.extension().map_or(false, |ext| ext == "csv") {
                Some(path)
            } else {
                None
            }
        })
        .collect::<Vec<_>>();
    Ok(paths)
}
Run Code Online (Sandbox Code Playgroud)

如果Err读取目录出现问题,它将获取所有以csv.


phi*_*mue 5

也许您正在寻找类似以下内容的东西:

fn main() {
    let mut faxvec: Vec<std::path::PathBuf> = Vec::new();
    for element in std::path::Path::new(r"C:\Testpath").read_dir().unwrap() {
        let path = element.unwrap().path();
        if let Some(extension) = path.extension() {
            if extension == "txt" {
                faxvec.push(path);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)