不使用std::env::current_dir,用walkdir获取当前目录文件的方法
解决WalkDir中使用"."作为当前目录的问题
其实walkdir crate原生就支持用"."表示当前目录,你不需要手动将其转换为绝对路径,代码里那段判断path == "."的逻辑完全是多余的。
问题分析
WalkDir::new(".")会自动解析为当前工作目录, crate内部已经处理了相对路径的解析逻辑。你之前手动转换的操作不仅没必要,还引入了unwrap()带来的panic风险(比如当前目录不可访问时)。
优化后的代码
直接移除手动转换逻辑,保留过滤隐藏文件的功能即可:
use walkdir::{WalkDir, DirEntry}; use std::error::Error; fn is_hidden(entry: &DirEntry) -> bool { entry.file_name() .to_str() .map(|s| s.starts_with(".")) .unwrap_or(false) } pub fn get_dir_files(path: String) -> Result<(), Box<dyn Error>> { // 直接使用传入的路径,包括"." let walker = WalkDir::new(path).into_iter(); for entry in walker.filter_entry(|e| !is_hidden(e)) { println!("{}", entry?.path().display()); } Ok(()) }
额外说明
如果需要处理更复杂的路径解析(比如".."或者相对路径的规范化),可以结合std::path::Path的canonicalize()方法,但对于"."这个基础场景,walkdir已经足够处理,不需要额外操作。
内容的提问来源于stack exchange,提问作者devMe
相关产品推荐
相关产品推荐

