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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:55:16