如何打印不带引号的 OsStr?

Syl*_*act 5 formatting rust

我正在尝试为文件路径创建一个新名称。一切正常,除了当我尝试格式化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());
}
Run Code Online (Sandbox Code Playgroud)

这是当前的输出:

/home/user/test/"something"_4."txt"
Run Code Online (Sandbox Code Playgroud)

但我需要它是:

/home/user/test/something_4.txt
Run Code Online (Sandbox Code Playgroud)

Nov*_*zen 5

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(),
));
Run Code Online (Sandbox Code Playgroud)

  • @Shepmaster 如果您有其他答案,请写下来。 (6认同)
  • 我仍然[认为这里使用 `&str` 是不合适的](/sf/ask/4918680231/?noredirect=1#comment124212854_70266860 ),因为您不必要地阻止非 UTF-8 文本。 (3认同)