История изменений
Исправление mersinvald, (текущая версия) :
Можно и на расте
extern crate failure;
use std::{
path::Path,
fs::metadata,
};
use failure::Error;
fn walk(root: impl AsRef<Path>, callback: impl Fn(&Path)) -> Result<(), Error> {
let root = root.as_ref().to_path_buf();
let mut tasks = vec![root];
while let Some(path) = tasks.pop() {
if path.is_file() {
callback(&path);
} else if path.is_dir() {
for dir in read_dir(&path)? {
tasks.push(dir?.path());
}
}
}
Ok(())
}
fn main() {
walk("./", |path| println!("{:?}", path.display()))
.unwrap();
}
Исходная версия mersinvald, :
Можно и на расте
fn walk(root: impl AsRef<Path>, callback: impl Fn(&Path)) -> Result<(), Error> {
let root = root.as_ref().to_path_buf();
let mut tasks = vec![root];
while let Some(path) = tasks.pop() {
if path.is_file() {
callback(&path);
} else if path.is_dir() {
for dir in read_dir(&path)? {
tasks.push(dir?.path());
}
}
}
Ok(())
}
fn main() {
walk("./", |path| println!("{:?}", path.display()))
.unwrap();
}