首页 > 解决方案 > 用户输入结合 std::path 检查路径

问题描述

我想测试用户输入提供的文件是否存在以下代码:

let mut path_file = String::new();
// input example : path_file = input("C:/Users/.../.../.../file.DAT");
match io::stdin().read_line(&mut path_file) {
    Ok(n) => {
        let path: bool = Path::new(&path_file).exists();
        // let path: bool = Path::new("C:/Users/.../.../.../file.DAT").exists();
        if path {
            read_file_fo(Path::new(&path_file));
        } else {
            println!("...");
        }
    }
    Err(error) => println!("error : {}", error),
}

但是,条件总是错误的。如果我直接硬编码路径:

let path: bool = Path::new("C:/Users/.../.../.../file.DAT").exists();

代替 :

let path: bool = Path::new(&path_file).exists();

脚本运行良好。

有人可以解释为什么吗?

标签: rust

解决方案


read_line保留尾随换行符,因此将其修剪掉:

let trimmed_path_file = path_file.trim();
let path = Path::new(&trimmed_path_file);
if path.exists() {
    read_file_fo(path);
} else {
    println!("Path does not exist.");
}

推荐阅读