1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use std::fs;
use std::path::Path;


/// Returns size in bytes of a file or directory. For directories, it recursively gets all of the
/// sizes of its children.
pub fn get_size<P: AsRef<Path>>(path: P) -> std::io::Result<u64> {
    let metadata = try!(fs::metadata(&path));
    let mut size = metadata.len();
    if metadata.is_dir() {
        for entry in try!(fs::read_dir(&path)) {
            size += try!(get_size(try!(entry).path()));
        }
    }
    Ok(size)
}