fea*_*net 4 .net c# directory path filepath
我花了一些时间在我的代码中找到这个bug.尝试创建临时测试目录:
Path.Combine("C:", "test");
Directory.CreateDirectory(path);
Run Code Online (Sandbox Code Playgroud)
所以这不会创建目录C:\test.它似乎只是test在执行程序集的本地文件夹中创建目录.
这是因为Path.Combine("C:", "test");退货C:test,而不是C:\test.
我不会假装对文件系统了解太多,所以也许这个原因应该是显而易见的,但我不明白.我不确定他们为什么这样实现Path,或者为什么CreateDirectory不抱怨无效的目录名称.
Jon*_*eet 11
好吧,你要把驱动器号和名字结合起来.在Windows下,表示"该驱动器的当前目录下的名称".例如:
C:\> cd foo
c:\foo> d:
d:\> mkdir c:bar
Run Code Online (Sandbox Code Playgroud)
这将创造c:\foo\bar.所以它似乎与Windows的设计(回到MS-DOS)一致 - 对于Windows而言,这不一定是一个明智的设计,但是.NET与它一致是有意义的.
Path.Combine表现得这样,因为:它是有效的VolumeSeparatorChar- 所以a \不会被附加到C:.
从MSDN - Path.Combine方法(字符串,字符串):
如果path1不是驱动器引用(即"C:"或"D:")并且不以DirectorySeparatorChar,AltDirectorySeparatorChar或VolumeSeparatorChar中定义的有效分隔符结束,则在连接之前会将DirectorySeparatorChar附加到path1.
至于行为CreateDirectory- 请参阅Jon Skeet 的回答.