dir-iterator

Crates.iodir-iterator
lib.rsdir-iterator
version0.1.4
sourcesrc
created_at2024-11-14 22:02:32.74855
updated_at2024-11-17 11:59:28.592022
descriptionIterator that recursively scans and filters files from a directory
homepage
repositoryhttps://github.com/fightling/dir-iterator
max_upload_size
id1448388
size14,147
Patrick Hoffmann (fightling)

documentation

https://docs.rs/dir-iterator

README

dir-iterator

Iterator that recursively scans and filters files from a directory.

Usage

Installation

Start using this library by running the following command in your cargo project directory.

cargo add dir-iterator

Read a Directory Recursively

Read 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 Recursively

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 Result with Wildcards

Filter the result with wildcards by using exclude(wildcard) and 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()));
}

Ignore Folders When Scanning

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()));
}
Commit count: 28

cargo fmt