在Rust中打印路径

时间:2014-06-05 10:41:24

标签: rust

如何在Rust中打印路径?

我尝试了以下方法来打印当前的工作目录:

use std::os;

fn main() {
    let p = os::getcwd();
    println!("{}", p);
}

但是rustc返回时出现以下错误:

[wei2912@localhost rust-basics]$ rustc ls.rs 
ls.rs:5:17: 5:18 error: failed to find an implementation of trait core::fmt::Show for std::path::posix::Path
ls.rs:5     println!("{}", p);
                           ^
note: in expansion of format_args!
<std macros>:2:23: 2:77 note: expansion site
<std macros>:1:1: 3:2 note: in expansion of println!
ls.rs:5:2: 5:20 note: expansion site

3 个答案:

答案 0 :(得分:18)

正如您所发现的,&#34;正确&#34;打印Path的方法是通过.display方法,该方法返回a type来实现Display

Path本身没有实现Display的原因:格式化字符串的路径是一种有损操作。并非所有操作系统都存储与UTF-8兼容的路径,并且格式化例程隐含地仅处理UTF-8数据。

例如,在我的Linux系统上,值为255的单个字节是完全有效的文件名,但这不是UTF-8中的有效字节。如果您尝试将Path打印到字符串,则必须以某种方式处理无效数据:.display将使用替换字符U + FFFD替换无效的UTF-8字节序列,但此操作不能逆转。

总之,Path应该很少被视为字符串,因此他们不会实施Display来鼓励这样做。

答案 1 :(得分:6)

以下内容将打印完整路径:

println!("{}", p.display());

有关详细信息,请参阅Path::display

答案 2 :(得分:0)

作为一个相关的切线,我已经为您“只想在UTF-8中使用” stfu8编写了一个库。

这使用转义符(即\x00)来格式化开发人员可能期望的任何近UTF-8序列。