【RustLangで引数で指定したパスのディレクトリ一覧を取得する】

標準ライブラリのみ使用

use std::env; // Rustの標準ライブラリからenvを使用する
use std::fs; // Rustの標準ライブラリからfsを使用する
use std::path::Path; // Rustの標準ライブラリからPathを使用する

fn main() {
    // プログラムのメイン関数

    // コマンドライン引数を取得する
    let args: Vec<String> = env::args().collect();

    // 引数の数が2でなければpanicする
    // 1番目の要素には実行したファイルの名前(相対パス)が含まれている
    if args.len() != 2 {
        panic!("Expected a single argument specifying the directory path");
    }

    // 2番目の引数をパースしてPath型に変換し、pathにバインドする
    let path = Path::new(&args[1]);

    // read_dir()でpathに存在するエントリーのイテレータを取得し、
    //forループで一つずつ処理する
    for entry in fs::read_dir(path).unwrap() {
        // unwrap()でエントリーの取得に失敗した場合はpanicし、
        //成功した場合はentryにバインドする
        let entry = entry.unwrap();

        // unwrap()でfile_typeの取得に失敗した場合はpanicし
        //成功した場合はfile_typeにバインドする
        let file_type = entry.file_type().unwrap();

        // entryがディレクトリかどうかをチェックする
        if file_type.is_dir() {
            // entryのパスを表示する
            println!("{}", entry.path().display());
        }
    }
}

cargo run — ./
と実行してみて下さい。挙動がわかるはず。

コメント