根据官方文档有关Path.Combine
方法:https://msdn.microsoft.com/en-us/library/fyy7a5kt(v=vs.110).aspx
Remarks
如果 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:
.
这背后的原因是什么?
Path.Combine
那样工作是因为c:file.txt
实际上是一个有效的路径。
根据有关 NTFS 路径的 Microsoft 文档:
如果文件名仅以磁盘指示符开头,而不以冒号后面的反斜杠开头,则它将被解释为驱动器上具有指定字母的当前目录的相对路径。请注意,当前目录可能是根目录,也可能不是根目录,具体取决于该磁盘上最近一次“更改目录”操作期间设置的目录。
简而言之,c:file.txt
会在C盘当前目录下搜索文件,同时c:\file.txt
将在驱动器的根文件夹中搜索文件(忽略当前目录)。
Since Path.Combine
无法知道您期望的行为是什么,它无法自动添加反斜杠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)