18 lines
501 B
Rust
18 lines
501 B
Rust
|
use std::path::PathBuf;
|
||
|
use std::{fs, io};
|
||
|
|
||
|
pub fn dir_size(path: impl Into<PathBuf>) -> io::Result<u64> {
|
||
|
fn dir_size(mut dir: fs::ReadDir) -> io::Result<u64> {
|
||
|
dir.try_fold(0, |acc, file| {
|
||
|
let file = file?;
|
||
|
let size = match file.metadata()? {
|
||
|
data if data.is_dir() => dir_size(fs::read_dir(file.path())?)?,
|
||
|
data => data.len(),
|
||
|
};
|
||
|
Ok(acc + size)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
dir_size(fs::read_dir(path.into())?)
|
||
|
}
|