Проверка существования в Rust
Сведения о пути говорят, есть ли он, и отдельно файл это или папка. Команда метаданных возвращает результат: при удаче внутри лежит описание объекта, при отсутствии пути - сбой, который можно разобрать.
Проверим существующий файл и ответ для несуществующего пути:
use std::fs;
use std::io;
fn describe(path: &str) -> io::Result<()> {
let info = fs::metadata(path)?;
if info.is_file() {
println!("file");
} else if info.is_dir() {
println!("dir");
} else {
println!("other");
}
Ok(())
}
fn main() -> io::Result<()> {
fs::write("note.txt", "x")?;
describe("note.txt")?;
Ok(())
}
Если путь не найден, результат будет сбоем. Разберем его отдельно:
use std::fs;
fn main() {
match fs::metadata("missing.txt") {
Ok(info) => {
if info.is_file() {
println!("file");
}
}
Err(err) => println!("{}", err),
}
}
Дан путь:
let path = "data";
Создайте папку, запросите метаданные
и выведите "dir", если это каталог.
Дан путь:
let path = "gone.txt";
Запросите метаданные и выведите текст сбоя, если объекта нет.
Скажите, чем отличается сбой отсутствия от удачного ответа с флагом файла.