在 Visual Studio的 即时窗口中:
> Path.Combine(@"C:\x", "y") "C:\\x\\y" > Path.Combine(@"C:\x", @"\y") "\\y"
看来他们应该是一样的。
旧的 FileSystemObject.BuildPath() 不能这样工作......
这是一个哲学问题(也许只有微软才能真正回答),因为它完全按照文档所说的那样做。
System.IO.Path.Combine
“如果 path2 包含绝对路径,则此方法返回 path2。”
这是来自 .NET 源代码的实际组合方法。您可以看到它调用了CombineNoChecks,然后它在 path2 上调用IsPathRooted并返回该路径(如果是):
public static String Combine(String path1, String path2) { if (path1==null || path2==null) throw new ArgumentNullException((path1==null) ? "path1" : "path2"); Contract.EndContractBlock(); CheckInvalidPathChars(path1); CheckInvalidPathChars(path2); return CombineNoChecks(path1, path2); } internal static string CombineNoChecks(string path1, string path2) { if (path2.Length == 0) return path1; if (path1.Length == 0) return path2; if (IsPathRooted(path2)) return path2; char ch = path1[path1.Length - 1]; if (ch != DirectorySeparatorChar && ch != AltDirectorySeparatorChar && ch != VolumeSeparatorChar) return path1 + DirectorySeparatorCharAsString + path2; return path1 + path2; }
我不知道理由是什么。我想解决方案是从第二条路径的开头剥离(或修剪)DirectorySeparatorChar;也许编写您自己的组合方法,然后调用 Path.Combine()。