You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:13:15