根据有关Path.Combine
方法的官方文档:https://msdn.microsoft.com/en-us/library/fyy7a5kt(v=vs.110).aspx
说明
如果path1不是驱动器引用(即“C:”或“D:”)并且不以DirectorySeparatorChar,AltDirectorySeparatorChar或VolumeSeparatorChar中定义的有效分隔符结尾,则在连接之前将DirectorySeparatorChar附加到path1
这意味着它不会在驱动器号后面添加\
,所以这段代码:
var path1 = @"c:";
var path2 = @"file.txt";
Path.Combine(path1, path2);
将生成C:file.txt
,但不会强行指向放置在file.txt
中的文件c:
。
这背后的原因是什么?
答案 0 :(得分:14)
Path.Combine
以这种方式工作,因为c:file.txt
实际上是一条有效路径。
根据Microsoft documentation on NTFS paths:
如果文件名仅以磁盘指示符开头但不以冒号后面的反斜杠开头,则会将其解释为指定字母的驱动器上当前目录的相对路径。请注意,当前目录可能是也可能不是根目录,具体取决于在该磁盘上最近的“更改目录”操作期间设置的内容。
简而言之,c:file.txt
将搜索C:驱动器当前目录中的文件,而c:\file.txt
将搜索驱动器根文件夹中的文件(忽略当前目录)。
由于Path.Combine
无法知道您期望的行为,因此无法自动添加反斜杠。
答案 1 :(得分:3)
路径c:
和c:\
不一样。
c:
是驱动器规范,操作系统会在需要时附加当前文件夹。
c:\
是驱动器的根文件夹,如c:
+ \