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

Tsc*_*eck 3 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);
Run Code Online (Sandbox Code Playgroud)

这是,已写入日志的内容:

C:\Sync
\0100_MACHINES
Layout US.pdf 
savepath: \0100_MACHINES\Layout US.pdf
Run Code Online (Sandbox Code Playgroud)

谁能给出可能的原因,为什么Path.Combine省略第一个参数,而只结合第二个和第三个参数?同样有趣的是,这只发生在一台机器上。

Tsc*_*eck 5

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

string savePath = Path.Combine(mapping.Folder, 
                     fileMeta.RelativePath.TrimStart('\\'), 
                     fileMeta.Filename.TrimStart('\\'));
Run Code Online (Sandbox Code Playgroud)

  • 如果我无论如何都必须清理字符串,那么 Path.Combine 有什么用呢? (2认同)