我注意到我的代码将文件写入不正确的文件夹,因此我添加了一些日志记录,结果让我感到惊讶。我的代码:
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
省略了第一个参数,只是结合了第二个和第三个?什么也很有趣,只发生在一台机器上。
答案 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。