Path.Combine省略其中一个参数的可能原因

时间:2016-03-21 16:27:44

标签: c# concatenation

我注意到我的代码将文件写入不正确的文件夹,因此我添加了一些日志记录,结果让我感到惊讶。我的代码:

 string savePath = Path.Combine(mapping.Folder, fileMeta.RelativePath, fileMeta.Filename);
 logger.Info(mapping.Folder);
 logger.Info(fileMeta.RelativePath);
 logger.Info(fileMeta.Filename);
 logger.Info("savepath: {0}", savePath);

这就是写入日志的内容:

C:\Sync
\0100_MACHINES
Layout US.pdf 
savepath: \0100_MACHINES\Layout US.pdf

任何人都可以给出可能的理由,为什么Path.Combine省略了第一个参数,只是结合了第二个和第三个?什么也很有趣,只发生在一台机器上。

2 个答案:

答案 0 :(得分:2)

第二个参数以反斜杠字符开头。这导致Path.Combine之前省略了该部分。通过添加TrimStart

解决了这个问题
string savePath = Path.Combine(mapping.Folder, 
                     fileMeta.RelativePath.TrimStart('\\'), 
                     fileMeta.Filename.TrimStart('\\'));

答案 1 :(得分:0)

  

如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,以及插入的分隔符。如果path2包含根,则返回path2。   https://msdn.microsoft.com/en-us/library/dd784047(v=vs.110).aspx

似乎C#将相对文件夹视为根路径,因此忽略了path1。