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.
相关产品推荐
相关产品推荐

