String 基于Rust中的另一个路径格式化文件名的最佳方法
有没有更简洁的方法来写下面的内容String 基于Rust中的另一个路径格式化文件名的最佳方法,string,path,rust,String,Path,Rust,有没有更简洁的方法来写下面的内容 使用std::path::path; 让path=path::new(“/path/to/foo.txt”); 让格式化=&格式化!(“{}%d.{}”,path.file_-stem().unwrap().to_-str().unwrap(),path.extension().unwrap().to_-str().unwrap()); 断言!(“foo%d.txt”,已格式化); (我想把/path/转换成/foo.txt转换成foo%d.txt)不,没有比
使用std::path::path;
让path=path::new(“/path/to/foo.txt”);
让格式化=&格式化!(“{}%d.{}”,path.file_-stem().unwrap().to_-str().unwrap(),path.extension().unwrap().to_-str().unwrap());
断言!(“foo%d.txt”,已格式化);
(我想把
/path/转换成/foo.txt
转换成foo%d.txt
)不,没有比你拥有的更好的了。路径是UTF-8字符串,路径可能有文件系统或扩展名。你必须处理所有这些情况,这就是Rust成为一种好语言的原因
我唯一能建议的就是避免转换成UTF-8字符串。如果缺少组件,也可以使用占位符空值或有条件地执行操作:
use std::path::Path;
use std::ffi::OsStr;
fn main() {
let path = Path::new("/path/to/foo.txt");
let stem = path.file_stem().unwrap_or(OsStr::new(""));
let mut filename = stem.to_os_string();
filename.push("%d.");
if let Some(extension) = path.extension() {
filename.push(extension);
}
assert_eq!(OsStr::new("foo%d.txt"), filename);
}
这是路径到路径还是字符串到字符串的转换?字符串到路径到字符串,所以我猜字符串到字符串(但我想使用类似path::file\u-stem
和path::extension
)的方法)