我有以下命令:
string reportedContentFolderPath =
Path.Combine(contentFolder.FullName.ToString(), @"\ReportedContent\");
当我查看调试器时,我可以看到以下内容:
contentFolder.FullName = "E:\\"
然而
reportedContentFolderPath = "\\ReportedContent\\"
为什么Path.Combine
会切断E:\?
答案 0 :(得分:28)
@"\ReportedContent\"
上有一个前导斜杠。你不想要那个(或我怀疑的尾随) - 试试吧:
string reportedContentFolderPath =
Path.Combine(contentFolder.FullName.ToString(), "ReportedContent");
如果
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\"
是一个绝对路径,因为它以反斜杠开头。