LINUX.ORG.RU

История изменений

Исправление 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();
}