【问题标题】:Why Path.Combine doesn't add the Path.DirectorySeparatorChar after the drive designator?为什么 Path.Combine 不在驱动器指示符后添加 Path.DirectorySeparatorChar?
【发布时间】:2010-12-04 10:01:52
【问题描述】:
var actual = Path.Combine("c:", "filename");
var expected = @"c:\filename";
Assert.AreEqual(expected, actual);

结果

{Assert.AreEqual failed. Expected:<c:\filename>. Actual:<c:filename>.

为什么?

【问题讨论】:

    标签: .net path path-combine


    【解决方案1】:

    MSDN 似乎没有解释原因,但确实提供了有关您所看到内容的文档:

    Path.Combine(string path1, string path2)

    如果 path1 不是驱动器引用(即“C:”或“D:”)并且不以 DirectorySeparatorChar、AltDirectorySeparatorChar 或 VolumeSeparatorChar 中定义的有效分隔符结尾,则 DirectorySeparatorChar 在连接之前附加到 path1 .

    【讨论】:

      【解决方案2】:

      C:filename 是有效路径,与C:\filename 不同。 C:filenameC: 驱动器上当前目录中的文件filename,而C:\filename 是该驱动器根目录中的文件filename。显然他们想保留在某个驱动器上引用当前目录的功能。

      此行为在 MSDN 中描述为 here

      【讨论】:

      • 这是 DOS 1.x IIRC 的保留... :-)
      • 怪异的......这是不直观的。获得期望值的方法是什么? Path.Combine( drive + @"\", path ) ?
      • @Gishu - 这只是不直观的,因为路径在 Windows 操作系统中的工作方式并不像人们想象的那么简单。请参阅我链接到的 MSDN 文章,了解有关 Windows 路径如何工作的说明。 Path.Combine() 组合了两条路径。我不会按照您建议的方式使用字符串连接,因为这违背了 Path.Combine() 的全部目的。 AFAIC,您在指定路径时应该小心。如果您的意思是“C:\”,请使用它,如果 OTOH 您的意思是“C:”(它不同但同样有效),那么请使用它。
      猜你喜欢
      • 2010-09-08
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多