处理可能是驱动器号或连接到其他东西的路径的正确方法是什么?

时间:2018-07-12 03:55:53

标签: rust

使用以下程序:

L

POSIX会给您:

use std::path::Path;

fn main() {
    println!("{:?}", Path::new("P:").join("A_B_C\\D\\E\\F\\G.hij"));
}

但是Windows会给您:

"P:/A_B_C\\D\\E\\F\\G.hij"

至少"P:A_B_C\\D\\E\\F\\G.hij" 认为后者不是预期的路径。

同样的例子:

std::fs::copy

1 个答案:

答案 0 :(得分:2)

首先,请注意,当您指定驱动器号时不带斜杠符号时,Windows API会将其解释为驱动器上当前目录的相对路径。即Carbon::create(2018, 1, 31, 0, 0, 0)->addMonth(); P:可以引用不同的位置,并且P:\是有效路径,表示P:file.txt。您可以通过更改目录来验证它,然后从命令提示符P:\current\dir\file.txtdir P:进行调用。

如果确定要将“ P:”解释为根路径,则可能应该手动检测它并添加根斜杠,但是我认为这是一种不好的做法。

要严格解释路径前缀并构建绝对路径前缀,可以使用Path::canonicalize()方法,但是请记住,它仅适用于目标操作系统中实际存在的驱动器/路径。

dir P:\