Я изучал Rust, и у меня возникла небольшая проблема с этим кодом.
let path = Path::new(&return_path); // return path is the user input
println!("{}", path.is_dir());
match path.is_dir() {
true => print!("yep its true"),
false => print!("nope its false")
}
Это всегда возвращает ложь. Я пытаюсь создать систему, в которой пользователь может указать абсолютный путь, например, /home/user/Downloads
, и он проверяет, является ли это допустимым каталогом для вставки файла.
Путь на самом деле exists()
?
Я предлагаю попытаться записать файл в каталог и выявить любую ошибку ввода-вывода, которая может возникнуть у пользователя. Существует так много способов записи файла в каталог, которые могут пойти не так, и путь, не указывающий на существующий каталог, является лишь одним из них, поэтому проверка этого на самом деле не принесет вам многого.
/home/user
— это домашний путь для моей системы Linux. /Downloads
— это папка загрузки, которая действительно существует.
Может быть, перепроверить &return_path
? Вот фрагмент для проверки того, что путь работает должным образом:
use std::env;
use std::path::Path;
fn main() {
let arg = env::args().nth(1).unwrap(); // Get first arguement
println!("Inspecting path {}", arg);
let path = Path::new(&arg);
println!("exists?: {}", path.exists());
println!("is_file?: {}", path.is_file());
println!("is_dir?: {}", path.is_dir());
println!("is_symlink?: {}", path.is_symlink());
if let Ok(full_path) = path.canonicalize() {
println!("Canonical path: {:?}", full_path);
} else {
println!("Couldn't canonicalize path");
}
}
И в моей системе:
> ./tmp /home/me/Downloads
Inspecting path /home/me/Downloads
exists?: true
is_file?: false
is_dir?: true
is_symlink?: false
Canonical path: "/home/me/Downloads"
Что произойдет, если вы напечатаете путь к строке с помощью
println!("{:?}", return_path);
? Я предполагаю, что ваш путь неверен и имеет новую строку в конце или что-то в этом роде.