一覧に戻る

Rustで指定ディレクトリ内の全てのファイルのパスを取得する

#Rust

サンプルコード

use std::error::Error;
use std::fs;
use std::path;

pub fn read_dir(path: &str) -> Result<Vec<path::PathBuf>, Box<dyn Error>> {
    let dir = fs::read_dir(path)?;
    let mut files: Vec<path::PathBuf> = Vec::new();
    for item in dir.into_iter() {
        files.push(item?.path());
    }
    Ok(files)
}

ポイント

let dir = fs::read_dir(path)?;

このときdirはOk(std::fs::ReadDir)型 https://doc.rust-lang.org/std/fs/struct.ReadDir.html into_iter()によりイテレータとし、パスを順次取得できる


for item in dir.into_iter() {
    files.push(item?.path());
}

ここでitemはstd::fs::DirEntry型 https://doc.rust-lang.org/std/fs/struct.DirEntry.html path()によりstd::path::PathBuf型でパスを取り出せる