如何打印不带引号的 OsStr?

How do I print an OsStr without the quotes?

我正在尝试为文件路径创建一个新名称。一切正常, 除了 ,当我尝试格式化 OsStrs 时,它会自动将它们放在引号中。这让我发疯了几个小时,无论我使用 {:?} 格式还是 {:#?},它都没有改变任何事情。我也尝试使用 .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(),
));