ディレクトリを作成する (create_dir)
Rust でディレクトリを作成するには、std::fs::create_dir 関数 を使用します。
use std::fs;
fn main() -> std::io::Result<()> {
fs::create_dir("aaa")?;
Ok(())
}
すでに同名のディレクトリが存在している場合など、ディレクトリを作成できない場合はエラーが発生します。
use std::fs;
fn main() {
match fs::create_dir("aaa") {
Ok(_) => println!("ディレクトリを作成しました"),
Err(_) => eprintln!("ディレクトリを作成できませんでした"),
}
}
複数階層のディレクトリを作成する (create_dir_all)
深い階層のディレクトリを一気に作成するには、create_dir
の代わりに create_dir_all 関数 を使用します。
このメソッドは、すでに存在しているディレクトリを指定してもエラーにならない ので、create_dir
より使い勝手はよいかもしれません。
use std::fs;
fn main() {
fs::create_dir_all("aaa/bbb/ccc").unwrap(); // 成功する前提で unwrap
}
ディレクトリを削除する (remove_dir)
既存の(空の)ディレクトリを削除するには、std::fs::remove_dir 関数を使用します。
この関数は、Linux の rmdir
コマンドと同様、空のディレクトリしか削除できないことに注意してください(DirectoryNotEmpty エラーが発生します)。
存在しないディレクトリを削除しようとした場合もエラーが発生します。
use std::fs;
fn main() -> std::io::Result<()> {
fs::remove_dir("aaa")?;
Ok(())
}
空でないディレクトリを削除する (remove_dir_all)
ディレクトリ内に含まれているファイルやディレクトリも含めて丸ごと削除してしまうには、remove_dir
関数の代わりに remove_dir_all 関数 を使用します。
この関数も、存在しないディレクトリを指定するとエラーになります。
次の例では、Path#is_dir
関数でディレクトリの存在を確認してから削除しています。
use std::{fs, path::Path};
fn main() {
let dir_name = "aaa";
if Path::new(dir_name).is_dir() {
// ディレクトリが存在するなら丸ごと削除
match fs::remove_dir_all(dir_name) {
Ok(_) => println!("Directory `{}` has been removed", dir_name),
Err(e) => eprintln!("Failed to remove {}: {}", dir_name, e),
}
} else {
// ディレクトリは存在しなかった
println!("Directory {} does not exist", dir_name);
}
}