为什么这个Path.Combine不起作用?

时间:2011-08-03 15:43:29

标签: c# io

我有以下命令:

string reportedContentFolderPath =
Path.Combine(contentFolder.FullName.ToString(), @"\ReportedContent\");

当我查看调试器时,我可以看到以下内容:

contentFolder.FullName = "E:\\"

然而

reportedContentFolderPath = "\\ReportedContent\\"

为什么Path.Combine会切断E:\?

6 个答案:

答案 0 :(得分:28)

@"\ReportedContent\"上有一个前导斜杠。你不想要那个(或我怀疑的尾随) - 试试吧:

string reportedContentFolderPath =
    Path.Combine(contentFolder.FullName.ToString(), "ReportedContent");

来自the documentation

  

如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,并且有干预分隔符。如果path2包含根,则会返回path2

在您的情况下,path2 包含了一个根,因此在不查看path1的情况下返回了它。

答案 1 :(得分:7)

方法文档中对此进行了解释:

  

如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,以及插入的分隔符。如果path2包含root,则返回path2。

我建议你仔细阅读以了解所有可能的组合是如何运作的:Path.Combine Method

答案 2 :(得分:6)

Path.Combine将返回第二个参数,如果它以分隔符(\)开头。

答案 3 :(得分:3)

我敢打赌,通过在第二个字符串中指定斜杠作为前缀,Combine方法假定当前驱动器。尝试删除斜杠。

答案 4 :(得分:1)

看起来Path.Combine认为两个斜杠E:\\指的是UNC路径,而UNC路径不应该以驱动器号为前缀。将contentFolder更改为E:\,它应该可以正常工作。

答案 5 :(得分:1)

来自MSDN(强调我的):

public static string Combine(string path1, string path2)
     

[...]

     

返回值

     

类型:System.String   组合路径。如果其中一个指定路径是零长度字符串,则此方法返回另一个路径。 如果path2包含绝对路径,则此方法返回path2

@"\ReportedContent\"是一个绝对路径,因为它以反斜杠开头。