Iterator that recursively scans and filters files from a directory.
Start using this library by running the following command in your cargo project directory.
cargo add dir-iteratorRead a directory by using DirIterator::build_from_path(path):
use dir_iterator::*;
fn main() {
// read directory `src`
DirIterator::build_from_path("src")
// maybe maybe
.expect("path not found")
// print it out
.for_each(|e| println!("{:?}", e.file_name()));
}Read current directory by using DirIterator::build_current() is a little shorter because it will panic if current directory does not exist or can't be retrieved.
use dir_iterator::*;
fn main() {
// build a new iterator starting in the current directory
DirIterator::build_current()
// print each file name
.for_each(|e| println!("{:?}", e.file_name()));
}You may use DirIterator::try_build_current() to get errors instead of panic.
Filter the result with wildcards by using exclude(wildcard) which generates a filter.
use dir_iterator::*;
fn main() {
DirIterator::build_current()
// filter all files which have extension `txt`
.filter(exclude("*.txt"))
.for_each(|e| println!("{:?}", e.file_name()));
}To prevent some directories from being scanned at all you ca use ignore(wildcard).
use dir_iterator::*;
fn main() {
DirIterator::current()
// ignore target directory
.ignore("target")
// ignore all hidden directories
.ignore(".*")
// build iterator
.build()
// exclude all hidden files
.filter(exclude(".*"))
.for_each(|e| println!("{:?}", e.path()));
}Because ignore() parametrizes the following scan it must be placed in front of all Iterator trait methods and finished with build().