Путь всегда возвращает false при попытке вручную указать путь с помощью Rust

Я изучал 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, и он проверяет, является ли это допустимым каталогом для вставки файла.

Что произойдет, если вы напечатаете путь к строке с помощью println!("{:?}", return_path);? Я предполагаю, что ваш путь неверен и имеет новую строку в конце или что-то в этом роде.

loganfsmyth 22.03.2022 05:19

Путь на самом деле exists()?

BallpointBen 22.03.2022 05:20

Я предлагаю попытаться записать файл в каталог и выявить любую ошибку ввода-вывода, которая может возникнуть у пользователя. Существует так много способов записи файла в каталог, которые могут пойти не так, и путь, не указывающий на существующий каталог, является лишь одним из них, поэтому проверка этого на самом деле не принесет вам многого.

Sven Marnach 22.03.2022 11:11
/home/user — это домашний путь для моей системы Linux. /Downloads — это папка загрузки, которая действительно существует.
Sam 23.03.2022 00:23
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
4
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может быть, перепроверить &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"

Другие вопросы по теме