Как проверить размер каталога? - PullRequest
0 голосов
/ 03 февраля 2020

Есть ли способ проверить размер папки с помощью Rust?

Я не видел упомянутого такого метода. Я могу сделать это с помощью команды оболочки, но я предпочитаю избегать этого, если это возможно.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

Не могли бы вы объяснить, что вы имеете в виду более конкретно? Вы просто хотите получить du -подобную информацию (рекурсивно суммировать размер каждого файла)?

В этом случае вы, вероятно, захотите использовать std::fs::read_dir, итерировать записи, суммировать размеры ( через метаданные) не-каталогов, и переходить в каталоги.

Я почти уверен, что нет встроенного du, я не думаю, что даже есть встроенный рекурсивный обходчик каталогов (следовательно, walkdir )

1 голос
/ 03 февраля 2020

Либо вы используете ящик, либо вычисляете его вручную с чем-то вроде этого (рекурсивное решение):

use std::{fs, io, path::PathBuf};

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())?)
}

fn main() -> io::Result<()> {
    println!("{}", dir_size(".")?);

    Ok(())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...