来自 STDIN 的用户输入字符串(路径)不适用于 WalkDir

问题描述 投票:0回答:1

我尝试从用户那里收集目录,然后将其传递给 WalkDir 以获取其中的所有文件,但它不起作用。当我对其进行硬编码时,相同的输入正在工作。我是在Windows系统上测试的。

这不起作用,只是不返回任何内容。

let mut some_dir = String::new(); 

io::stdin()
    .read_line(&mut some_dir)
    .expect("Invalid Input");

some_dir = some_dir.replace("\\", "\\\\"); 

for entry in WalkDir::new(&some_dir).into_iter().filter_map(|file| file.ok()) {
    println!("{}", entry.path().display());
}

这有效

for entry in WalkDir::new("<dir>").into_iter().filter_map(|file| file.ok()) {
    println!("{}", entry.path().display());
}

背后的原因是什么以及如何解决?

rust
1个回答
0
投票

两个错误:

  • some_dir = some_dir.replace("\\", "\\\\");
    毫无意义。删除它。
  • some_dir
    包含
    \r\n
    。通过调用
    .trim()
    将其删除:
use std::io;

use walkdir::WalkDir;

fn main() {
    let mut some_dir = String::new();

    io::stdin().read_line(&mut some_dir).expect("Invalid Input");

    some_dir = some_dir.trim().to_string();

    dbg!(&some_dir);
    for entry in WalkDir::new(&some_dir)
        .into_iter()
        .filter_map(|file| file.ok())
    {
        println!("{}", entry.path().display());
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.