Path.Combine()行为与驱动器号

时间:2018-01-22 13:00:17

标签: c#

根据有关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:

这背后的原因是什么?

2 个答案:

答案 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: + \