How to List Files in a Directory in Rust

Alex Garella image

Alex Garella

9 October 2023

Listing the contents of a directory is a common task. Whether you’re building a file manager or a system scanner, Rust provides efficient and straightforward ways to enumerate files in a directory. This blog post explains how to use Rust’s standard library and the walkdir crate to achieve this.

Using Rust’s Standard Library:

Rust’s std::fs module provides the tools necessary for listing files in a directory.

Basic Directory Listing:

use std::fs;

fn main() {
    match fs::read_dir("/path/to/directory") {
        Ok(entries) => {
            for entry in entries {
                match entry {
                    Ok(entry) => println!("{:?}", entry.path()),
                    Err(e) => eprintln!("Error: {}", e),
                }
            }
        }
        Err(e) => eprintln!("Error: {}", e),
    }
}

Here, we use fs::read_dir to obtain an iterator over the entries in a directory, printing each entry to the console.

Exploring the walkdir Crate:

For a more feature-rich solution, the walkdir crate provides additional functionalities like filtering and sorting.

1. Installing walkdir

[dependencies]
walkdir = "2"

Add the above lines to your Cargo.toml file to incorporate the walkdir crate into your project.

2. Recursive Directory Listing:

extern crate walkdir;
use walkdir::WalkDir;

fn main() {
    for entry in WalkDir::new("/path/to/directory") {
        match entry {
            Ok(entry) => println!("{}", entry.path().display()),
            Err(e) => eprintln!("Error: {}", e),
        }
    }
}

With walkdir, we can recursively list all files and directories, handling each entry as needed.

Conclusion:

Listing files in a directory in Rust is a streamlined task, thanks to the std::fs module and the walkdir crate. By understanding and utilizing these resources, you can effectively manage filesystem operations in your Rust applications, making them more robust and capable.