为什么 Rust 在 Windows 中的路径上输出转义反斜杠?从输出中删除多余反斜杠的最佳方法是什么?

rad*_*vus 2 rust rust-cargo

背景

编写一个程序来监视目录和子目录,并在创建、更新、编辑路径中的文件时提醒用户。代码在github上共享。

我是 Rust 新手(大约 1 周的经验)。

使输出路径易于使用

我希望用户能够轻松复制输出路径(见下图)并复制/粘贴它以供使用。

当我在 Linux 上运行该程序时,它与目录分隔符(/ - 正斜杠)配合得很好,并且用户可以轻松复制路径并使用它。

问题:Windows 平台使用反斜杠

问题在于,在 Windows 平台上,路径是用反斜杠(也是转义字符)分隔的。

双反斜杠

当程序在 Windows 上输出路径时,它始终显示双反斜杠,并且该路径不易复制。

这是输出的快照:

win10上的双反斜杠

作为示例,我使用以下输出:

println!("{:?}", Path::new("c:\\windows\\"));
Run Code Online (Sandbox Code Playgroud)

输出来自 Path::new() 方法本身,但它始终输出带有双反斜杠的路径字符串。

您能帮我找到一种更好的方法来格式化输出,使其具有像正常路径一样的单个反斜杠(不包括转义反斜杠)吗?

编辑

有人提到尝试原始字符串输入,所以我尝试了以下操作:

println!("{:?}", Path::new(r"c:\windows\"));
Run Code Online (Sandbox Code Playgroud)

但是,Path::new 方法仍然输出双反斜杠。

Skg*_*and 11

问题是您正在使用Debug格式来打印路径,这会导致需要在字符串文字中转义的字符在输出中转义。

相反,您应该使用正常的Display格式,但由于 Path 不直接实现,Display您需要在路径上调用 display 来显示它。

println!("{}", Path::new("c:\\windows\\").display());
Run Code Online (Sandbox Code Playgroud)

请注意,Path::display如果路径包含非 unicode 数据,这并不是无损的。