Windows下STDIN输入路径至WalkDir无效问题排查与修复
问题原因
- 输入包含末尾换行符:
io::stdin().read_line()会将用户输入时按下的回车(Windows下为\r\n,类Unix系统为\n)一并读取到字符串中,导致传入WalkDir::new()的路径末尾多了不可见的换行字符。系统中不存在带换行的目录,因此遍历无输出。 - 多余的反斜杠替换:Windows路径的单反斜杠
\在Rust运行时字符串中无需转义(仅在编写字符串字面量时需要),手动替换为\\会把原本正确的路径变成双重反斜杠,进一步导致路径无效。
修复方案
对读取的输入字符串做末尾空白截断,同时移除多余的反斜杠替换逻辑:
use std::io; use walkdir::WalkDir; fn main() { let mut some_dir = String::new(); io::stdin() .read_line(&mut some_dir) .expect("Invalid Input"); // 移除首尾空白字符(含换行符) let some_dir = some_dir.trim(); for entry in WalkDir::new(some_dir).into_iter().filter_map(|file| file.ok()) { println!("{}", entry.path().display()); } }
补充说明
- 如果只想精准移除末尾的换行符(保留路径首尾的合法空格),可以用
trim_end_matches(&['\n', '\r'][..])替代trim()。 - Rust的
WalkDir对Windows路径有原生支持,直接使用用户输入的单反斜杠路径即可,无需手动转义。
内容的提问来源于stack exchange,提问作者mathless-generation
相关产品推荐
相关产品推荐

