如何打印不带引号的 OsStr?
How do I print an OsStr without the quotes?
我正在尝试为文件路径创建一个新名称。一切正常, 除了 ,当我尝试格式化 OsStr
s 时,它会自动将它们放在引号中。这让我发疯了几个小时,无论我使用 {:?}
格式还是 {:#?}
,它都没有改变任何事情。我也尝试使用 .unwrap().to_str()
,但输出更差。有谁知道如何去掉这些引号?
这是我的代码:
use std::path::Path;
fn main() {
let path = Path::new("/home/user/test/something.txt");
let mut pathbuf = path.to_path_buf();
pathbuf.set_file_name(&format!(
"{:?}_{}.{:?}",
path.file_stem().unwrap(),
4,
path.extension().unwrap()
));
println!("{}", pathbuf.display());
}
这是当前输出:
/home/user/test/"something"_4."txt"
但我需要的是:
/home/user/test/something_4.txt
OsStr
实现了 Debug
特性,但没有实现 Display
,我认为是因为 OsStr
不能保证是有效的 UTF-8。 OsStr::to_str
方法可以满足您的需求。
pathbuf.set_file_name(&format!(
"{}_{}.{}",
path.file_stem().unwrap().to_str().unwrap(),
4,
path.extension().unwrap().to_str().unwrap(),
));
我正在尝试为文件路径创建一个新名称。一切正常, 除了 ,当我尝试格式化 OsStr
s 时,它会自动将它们放在引号中。这让我发疯了几个小时,无论我使用 {:?}
格式还是 {:#?}
,它都没有改变任何事情。我也尝试使用 .unwrap().to_str()
,但输出更差。有谁知道如何去掉这些引号?
这是我的代码:
use std::path::Path;
fn main() {
let path = Path::new("/home/user/test/something.txt");
let mut pathbuf = path.to_path_buf();
pathbuf.set_file_name(&format!(
"{:?}_{}.{:?}",
path.file_stem().unwrap(),
4,
path.extension().unwrap()
));
println!("{}", pathbuf.display());
}
这是当前输出:
/home/user/test/"something"_4."txt"
但我需要的是:
/home/user/test/something_4.txt
OsStr
实现了 Debug
特性,但没有实现 Display
,我认为是因为 OsStr
不能保证是有效的 UTF-8。 OsStr::to_str
方法可以满足您的需求。
pathbuf.set_file_name(&format!(
"{}_{}.{}",
path.file_stem().unwrap().to_str().unwrap(),
4,
path.extension().unwrap().to_str().unwrap(),
));