使用以下程序:
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
答案 0 :(得分:2)
首先,请注意,当您指定驱动器号时不带斜杠符号时,Windows API会将其解释为驱动器上当前目录的相对路径。即Carbon::create(2018, 1, 31, 0, 0, 0)->addMonth();
和P:
可以引用不同的位置,并且P:\
是有效路径,表示P:file.txt
。您可以通过更改目录来验证它,然后从命令提示符P:\current\dir\file.txt
和dir P:
进行调用。
如果确定要将“ P:”解释为根路径,则可能应该手动检测它并添加根斜杠,但是我认为这是一种不好的做法。
要严格解释路径前缀并构建绝对路径前缀,可以使用Path::canonicalize()方法,但是请记住,它仅适用于目标操作系统中实际存在的驱动器/路径。
dir P:\