今日の内容
- 指定したフォルダのサイズを返すツールを作る
はじめに
前回は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)
}
コマンドライン引数からディレクトリのパスを受け取り、隅々までファイルを探してファイルサイズを合算します。
もしパスが指定されなければ、実行したディレクトリのフォルダサイズを表示します。
おわりに
二週間ほど事後報告になっていまうことをお許しください。
ご精読ありがとうございました。