rust 重命名删除图像而不是重命名图像的脚本

vdgimpew  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(149)

我想从文件夹中的PNG图像名称中删除_

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_path)) = path
                .file_name()
                .map(|name| name.to_str().map(|s| s.replace("_", "")))
            {
                fs::rename(path, new_path)?;
            }
        }
    }
    Ok(())
}

代码“删除”了png文件而不是重命名它们。我怀疑这是因为它们被重命名到了一个不存在的位置。但是我不太确定如何修改代码来修复这个问题。
实时代码:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=323f901e4f0f4c99dbf5affeb0127991

zrfyljdw

zrfyljdw1#

您当前的代码只是使用文件名作为新路径,您要做的是使用with_path_namepath的文件名替换为新文件名:

use std::error::Error;
use std::fs;

fn main() -> Result<(), Box<dyn Error>> {
    for entry in fs::read_dir("/home/alex/Desktop")? {
        let path = entry?.path();
        if path.is_file() && path.extension().unwrap_or_default() == "png" {
            if let Some(new_name) = path
                .file_name()
                .and_then(|name| name.to_str())
                .map(|s| s.replace("_", ""))
            {
                let new_path = path.with_file_name(new_name);
                fs::rename(path, new_path)?;
            }
        }
    }
    Ok(())
}

相关问题