我怎么能在Rust中打印一条路径?
我尝试了以下方法来打印当前的工作目录:
use std::os;
fn main() {
let p = os::getcwd();
println!("{}", p);
}
Run Code Online (Sandbox Code Playgroud)
但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
Run Code Online (Sandbox Code Playgroud)
huo*_*uon 18
正如您所发现的,打印a的"正确"方法Path
是通过.display
方法返回实现的类型Display
.
有一个原因Path
没有实现Display
自己:格式化字符串的路径是一个有损操作.并非所有操作系统都存储与UTF-8兼容的路径,并且格式化例程隐含地仅处理UTF-8数据.
例如,在我的Linux系统上,值为255的单个字节是完全有效的文件名,但这不是UTF-8中的有效字节.如果您尝试将其打印Path
到字符串,则必须以某种方式处理无效数据:.display
将使用替换字符U + FFFD替换无效的UTF-8字节序列,但此操作无法撤消.
总而言之,Path
s应该很少被处理,就像它们是字符串一样,因此它们不会实现Display
鼓励它.
以下将打印出完整路径:
println!("{}", p.display());
Run Code Online (Sandbox Code Playgroud)
请参阅Path::display
更多详细信息.
归档时间: |
|
查看次数: |
2801 次 |
最近记录: |