Rust:
Sprawdzanie, czy katalog istnieje

Jak to zrobić:

Standardowa biblioteka Rusta (std) zawiera funkcjonalność umożliwiającą sprawdzenie istnienia katalogu za pomocą modułów std::path::Path i std::fs. Oto prosty przykład użycia standardowego podejścia w Rust:

use std::path::Path;

fn main() {
    let path = Path::new("/ścieżka/do/katalogu");
    if path.exists() && path.is_dir() {
        println!("Katalog istnieje.");
    } else {
        println!("Katalog nie istnieje.");
    }
}

Przykładowe wyjście, zakładając, że katalog istnieje:

Katalog istnieje.

W bardziej złożonych scenariuszach lub dla zaawansowanych funkcji (takich jak asynchroniczne operacje na systemie plików) możesz rozważyć użycie biblioteki zewnętrznej, takiej jak tokio z jej asynchronicznym modułem fs, szczególnie jeśli pracujesz w środowisku asynchronicznym. Oto jak można osiągnąć to samo z tokio:

Najpierw dodaj tokio do swojego Cargo.toml:

[dependencies]
tokio = { version = "1.0", features = ["full"] }

Następnie użyj tokio::fs, aby asynchronicznie sprawdzić, czy katalog istnieje:

use tokio::fs;

#[tokio::main]
async fn main() {
    let path = "/ścieżka/do/katalogu";
    match fs::metadata(path).await {
        Ok(metadata) => {
            if metadata.is_dir() {
                println!("Katalog istnieje.");
            } else {
                println!("Ścieżka istnieje, ale nie jest katalogiem.");
            }
        },
        Err(_) => println!("Katalog nie istnieje."),
    }
}

Przykładowe wyjście, zakładając, że katalog nie istnieje:

Katalog nie istnieje.

Te przykłady podkreślają, jak Rust i jego ekosystem oferują zarówno synchroniczne, jak i asynchroniczne podejścia do sprawdzania istnienia katalogów, odpowiadając na szeroki zakres potrzeb rozwoju oprogramowania.