Rust重命名PNG文件脚本误删文件而非重命名的问题求助
问题原因与修复方案
你的代码核心问题是重命名时只传入了新文件名,没有拼接原目录路径,导致fs::rename把文件移动到了当前程序的工作目录(而非原桌面目录),所以你在原文件夹看不到文件,误以为被删除了。
修复步骤
需要将处理后的新文件名与原目录路径拼接,生成完整的目标路径,确保文件在原文件夹内重命名:
修改后的代码
use std::error::Error; use std::fs; use std::path::Path; fn main() -> Result<(), Box<dyn Error>> { let dir = Path::new("/home/alex/Desktop"); for entry in fs::read_dir(dir)? { let entry = entry?; let path = entry.path(); if path.is_file() && path.extension().unwrap_or_default() == "png" { if let Some(Some(new_filename)) = path .file_name() .map(|name| name.to_str().map(|s| s.replace("_", ""))) { // 关键修改:将原目录与新文件名拼接成完整路径 let new_path = dir.join(new_filename); fs::rename(path, new_path)?; } } } Ok(()) }
关键说明
- 原代码中
new_filename是仅包含文件名的字符串,fs::rename会将文件移动到当前工作目录(比如你运行程序的文件夹),而非原桌面目录。 - 修改后通过
dir.join(new_filename)生成原目录下的完整路径,确保文件在原文件夹内完成重命名操作。
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

