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

Why does Rust output escape backslashes on paths in windows? What is best way to remove the extra backslashes from output?

背景

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

上共享

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

使输出路径易于使用

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

当我 运行 Linux 上的程序时,它使用目录分隔符(/ - 正斜杠)效果很好,用户可以轻松复制路径并使用它。

问题:Windows 平台使用反斜杠

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

双反斜杠

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

这是输出的快照:

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

println!("{:?}", Path::new("c:\windows\"));

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

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

编辑

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

println!("{:?}", Path::new(r"c:\windows\"));

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

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

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

println!("{}", Path::new("c:\windows\").display());

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