这是一个有趣的问题;
当然,你可以这样写:
string finalPath = String.Format("{0}\\file.txt", folder);
达到你想要的结果。
不过,使用ILSpy,让我们看看为什么Path.Combine 更好。
你调用的重载是:
public static string Combine(string path1, string path2)
{
if (path1 == null || path2 == null)
{
throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
}
Path.CheckInvalidPathChars(path1, false);
Path.CheckInvalidPathChars(path2, false);
return Path.CombineNoChecks(path1, path2);
}
优势明显;首先,该函数检查空值并抛出适当的异常。然后它检查任一参数中的非法字符,并引发适当的异常。一旦满足,它就会调用 Path.CombineNoChecks:
private static string CombineNoChecks(string path1, string path2)
{
if (path2.Length == 0)
{
return path1;
}
if (path1.Length == 0)
{
return path2;
}
if (Path.IsPathRooted(path2))
{
return path2;
}
char c = path1[path1.Length - 1];
if (c != Path.DirectorySeparatorChar && c != Path.AltDirectorySeparatorChar && c != Path.VolumeSeparatorChar)
{
return path1 + Path.DirectorySeparatorChar + path2;
}
return path1 + path2;
}
这里最有趣的是它支持的字符;
Path.DirectorySeparatorChar = "\\"
Path.AltDirectorySeparatorChar = "/"
Path.VolumeSeparatorChar = ":"
因此它还将支持分隔符错误的路径(例如来自瓮中的file://C:/blah)
简而言之,它更好,因为它为您提供验证、一定程度的可移植性(上面显示的 3 个常量可以在每个框架操作系统的基础上定义),并且支持您经常遇到的不止一种类型的路径.