サンプルコード
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型でパスを取り出せる