標準ライブラリのみ使用
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 — ./
と実行してみて下さい。挙動がわかるはず。
コメント