0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(DAY26) 俺と学ぶRust言語~フォルダサイズ表示ツール~

Last updated at Posted at 2025-01-19

今日の内容

  • 指定したフォルダのサイズを返すツールを作る

はじめに

前回はwriteとwrite_allの違いについて学びました。今回は、指定したフォルダのサイズを返すツールを作成します。(しました)。

今日から二週間ほど、記事を書く時間が無くなるためほとんどの投稿が事後報告になります。100DaysOfCode本来の姿と捉えてください。

時間ができたら、プログラムの詳細やポイントなどの説明文をついかします。

作成したツール

指定したフォルダのサイズを返すツール

コード

fn main() {
    let args: Vec<String> = std::env::args().collect();
    //もし開始するディレクトリが指定されなければ、今の位置の構造を表示する
    let path = args.get(1).unwrap_or(&".".to_string()).clone();
    match search_dir(path) {
        Err(e) => eprintln!("Error: {}", e),
        Ok(size) => println!("size: {} bytes", size)
    }
}

fn search_dir(path: String) -> Result<u64, Box<dyn std::error::Error>> {
    let mut total_size: u64 = 0;
    for entry in std::fs::read_dir(path)? {
        let entry = entry?;
        let metadata = entry.metadata()?;
        if metadata.is_file() {
            total_size += metadata.len();
        } else if metadata.is_dir() {
            if let Some(entry_path) = entry.path().to_str() {
                total_size += search_dir(entry_path.to_string())?;
            }
        }
    }
    Ok(total_size)
}

コマンドライン引数からディレクトリのパスを受け取り、隅々までファイルを探してファイルサイズを合算します。
もしパスが指定されなければ、実行したディレクトリのフォルダサイズを表示します。

おわりに

二週間ほど事後報告になっていまうことをお許しください。
ご精読ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?