Skip to content
/ DirMeta Public

Extend std::fs with extra functionality like total directory size and returning all files and errors instead of returning an error

License

Notifications You must be signed in to change notification settings

448-OG/DirMeta

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FsMeta

crates.io DocsRust This crate adds the ability to recursively walk through a directory in an async fashion. The result is metadata about the directory which currently includes:

  • Get the total size of the directory in bytes
  • Get the size of files
  • Formatting of the file and directory sizes in human readable format (B, KiB, MiB, ...)
  • Fetch all the directories
  • Fetch all the files
  • Fetch the created, assessed and modified timestamps in Tai64N (monotonic, no leap seconds) timstamps
  • Fetch the created, assessed and modified timestamps in Local time (24 hour / 12 hour format)
  • format timestamps according to duration
  • Get the file format eg PDF or plain text
  • Returns all the files and directories in current directory with any errors that occur instead of just returning the error when error is encountered (like fs::read_dir())
  • Use parallelism where applicable (TODO)

Examples

[dependencies] 
dir-meta = {version = "*", default-features = false} #deactivate methods for converting timestamps to human readable formats in local time setting `default-features` to `false`
  • Compiling with async feature to enable asynchronously reading a directory
#[cfg(feature="async")]
smol::block_on(async {
    // Read a directory
    // With feature `async` enabled using `cargo add dir-meta --features async`
    let outcome = dir_meta::DirMetadata::new("src").async_dir_metadata().await.unwrap();

    dbg!(&outcome);

    // Get size of directory formatted as human readable
    dbg!(outcome.size_formatted());

    // Iterate over the files
    
    for file in outcome.files() {
        dbg!(&file.name()); //Get file name
        dbg!(&file.accessed_24hr()); // Get last accessed time in 24 hour format
        dbg!(file.accessed_am_pm()); //Get last accessed time in 12 hour format
        dbg!(&file.accessed_humatime()); //Get last accessed time based on duration since current time
        dbg!(&file.created_24hr());  //Get last created time in 24 hour format
        dbg!(&file.created_am_pm()); //Get last created time in 24 hour format
        dbg!(&file.created_humatime()); //Get last created time based on duration since current time
        dbg!(&file.modified_24hr()); //Get last modified time in 24 hour format
        dbg!(&file.modified_am_pm()); //Get last modified time in 24 hour format
        dbg!(&file.modified_humatime()); //Get last modified time based on duration since current time
        dbg!(file.formatted_size()); // Get the size of the file in human formatted size 
        dbg!(file.file_format()); // Get the format of the file eg (PDF)
    }
    
})
  • Compiling with sync feature to enable synchronously reading a directory
#[cfg(feature="sync")]
{
    // Read a directory
    // With feature `sync` enabled using `cargo add dir-meta --features sync`
    let outcome = dir_meta::DirMetadata::new("src").sync_dir_metadata().unwrap();

    dbg!(&outcome);

    // Get size of directory formatted as human readable
    dbg!(outcome.size_formatted());

    // Iterate over the files

    for file in outcome.files() {
        dbg!(&file.name()); //Get file name
        dbg!(&file.accessed_24hr()); // Get last accessed time in 24 hour format
        dbg!(file.accessed_am_pm()); //Get last accessed time in 12 hour format
        dbg!(&file.accessed_humatime()); //Get last accessed time based on duration since current time
        dbg!(&file.created_24hr());  //Get last created time in 24 hour format
        dbg!(&file.created_am_pm()); //Get last created time in 24 hour format
        dbg!(&file.created_humatime()); //Get last created time based on duration since current time
        dbg!(&file.modified_24hr()); //Get last modified time in 24 hour format
        dbg!(&file.modified_am_pm()); //Get last modified time in 24 hour format
        dbg!(&file.modified_humatime()); //Get last modified time based on duration since current time
        dbg!(file.formatted_size()); // Get the size of the file in human formatted size 
        dbg!(file.file_format()); // Get the format of the file eg (PDF)
    }
}
LICENSE

The code is licensed under APACHE-2.0

Code of Conduct

All contributions must obey the rules in the Rust Code of Conduct by the Rust Foundation

About

Extend std::fs with extra functionality like total directory size and returning all files and errors instead of returning an error

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages