fts-rs

Build Status

Bindings for libc fts, and a library for high performance directory walking.

Documentation

Usage

Cargo.toml [dependencies] fts-rs = "*"

Example

Call fts_* function directly:

```rust,norun use std::ffi::CString; use fts::ffi::{ftsopen, ftsread, ftsclose, FTS_LOGICAL};

let path = CString::new( "." ).unwrap().asptr(); let paths = vec![path, std::ptr::null()]; let fts = unsafe { ftsopen ( paths.asptr(), FTSLOGICAL, None ) }; let ftsent = unsafe { ftsread ( fts ) }; let _ = unsafe { fts_close( fts ) }; ```

Use WalkDir for directory walking:

```rust,no_run use std::path::Path; use fts::walkdir::{WalkDir, WalkDirConf}

let path = Path::new( "." ); for p in WalkDir::new( WalkDirConf::new( path ) ) { println!( "{:?}", p.unwrap() ); } ```

Benchmark

A cargo bench result is the following. fts_walkdir is this library, readdir is std::fs:read_dir, walkdir is walkdir::WaikDir. a suffix _metadata means using call DirEntry::metadata().

test fts_walkdir ... bench: 315,114,126 ns/iter (+/- 8,478,709) test fts_walkdir_metadata ... bench: 480,089,245 ns/iter (+/- 11,478,335) test readdir ... bench: 575,856,224 ns/iter (+/- 15,021,486) test readdir_metadata ... bench: 790,838,218 ns/iter (+/- 12,780,010) test walkdir ... bench: 688,884,058 ns/iter (+/- 8,023,838) test walkdir_metadata ... bench: 904,379,691 ns/iter (+/- 10,212,776)