我当前的解决方案是:
let temp = format!(
"{}.png",
path.file_stem().unwrap().to_string_lossy());
path.pop();
path.push(&temp);
这很丑陋,需要至少6个函数调用并创建一个新字符串。有没有更惯用,更短或更有效的方法来做到这一点?
最佳答案
PathBuf
提供了 set_extension
方法。如果扩展名不存在,它将添加扩展名;如果不存在,则将其替换为新扩展名。
let mut path = PathBuf::from("path/to/file");
path.set_extension("png");
assert_eq!(&path.to_string_lossy(), "path/to/file.png");
let mut path = PathBuf::from("path/to/file.jpg");
path.set_extension("png");
assert_eq!(&path.to_string_lossy(), "path/to/file.png");
关于path - 如何替换PathBuf或Path的文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59204100/