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

Rust(Tauri)中遍历ReadDir并将文件名存入数组的实现求助

Rust中使用fs::read_dir遍历目录并收集文件名的正确写法

原代码的问题点

  • fs::read_dir返回Result<ReadDir>,必须先处理错误,原代码直接调用.iter()会导致类型不匹配
  • ReadDir本身就是迭代器,无需额外调用.iter()
  • Vec<&str>无法存储动态生成的文件名,应使用Vec<String>;DirEntry不能直接添加到数组,需提取文件名并转换为字符串

修正后的代码

use std::fs;
use std::io;

// 接收字符串类型的目录路径,返回文件名数组或错误信息
fn collect_filenames(directory: &str) -> Result<Vec<String>, io::Error> {
    let mut filenames = Vec::new();

    // 遍历目录,先处理read_dir的结果
    for entry in fs::read_dir(directory)? {
        // 处理单个目录条目的错误
        let entry = entry?;
        // 提取文件名并转换为String,处理非UTF-8文件名的情况
        let filename = entry.file_name()
            .to_str()
            .ok_or_else(|| io::Error::new(io::ErrorKind::InvalidData, "文件名包含无效UTF-8字符"))?
            .to_string();
        
        filenames.push(filename);
    }

    Ok(filenames)
}

在Tauri中使用的示例

如果是作为Tauri命令暴露给前端,可以把错误转换为字符串返回:

#[tauri::command]
fn get_dir_files(directory: String) -> Result<Vec<String>, String> {
    collect_filenames(&directory)
        .map_err(|err| err.to_string())
}

内容的提问来源于stack exchange,提问作者Lars S.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:34:54