如何在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
答案 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)
答案 2 :(得分:0)
作为一个相关的切线,我已经为您“只想在UTF-8中使用” stfu8编写了一个库。
这使用转义符(即\x00
)来格式化开发人员可能期望的任何近UTF-8序列。