Как создать каталог в Rust, если он не существует: полное руководство с примерами кода

Метод 1: использование модуля std::fs
Самый простой способ создать каталог, если он не существует, — использовать модуль std::fs. Вот пример:

use std::fs;
fn main() {
    let dir_path = "path/to/directory";
    if let Err(err) = fs::create_dir_all(dir_path) {
        eprintln!("Failed to create directory: {}", err);
    } else {
        println!("Directory created successfully!");
    }
}

Метод 2: использование модуля std::path
Другой подход — использование модуля std::path, который предоставляет удобные методы для работы с путями. Вот пример:

use std::path::Path;
fn main() {
    let dir_path = Path::new("path/to/directory");
    if !dir_path.exists() {
        if let Err(err) = std::fs::create_dir_all(dir_path) {
            eprintln!("Failed to create directory: {}", err);
        } else {
            println!("Directory created successfully!");
        }
    }
}

Метод 3: использование структуры std::fs::DirBuilder
Структура std::fs::DirBuilderпозволяет настроить процесс создания каталогов. Вот пример:

use std::fs::DirBuilder;
fn main() {
    let dir_path = "path/to/directory";
    let dir_builder = DirBuilder::new();
    if let Err(err) = dir_builder.create(dir_path) {
        eprintln!("Failed to create directory: {}", err);
    } else {
        println!("Directory created successfully!");
    }
}

Метод 4: использование функции std::fs::metadata
Вы также можете использовать функцию std::fs::metadata, чтобы проверить, существует ли каталог перед его созданием. Вот пример:

use std::fs;
fn main() {
    let dir_path = "path/to/directory";
    if let Ok(metadata) = fs::metadata(dir_path) {
        if metadata.is_dir() {
            println!("Directory already exists!");
        } else {
            eprintln!("A file with the same name already exists!");
        }
    } else {
        if let Err(err) = fs::create_dir_all(dir_path) {
            eprintln!("Failed to create directory: {}", err);
        } else {
            println!("Directory created successfully!");
        }
    }
}