我并不完全看得出其中的区别。
Path.Combine
相较于完美工作的字符串连接,有什么更出色的表现吗?
我猜它在后台执行的是非常类似的操作。
有人能告诉我为什么经常会被优先选择使用吗?
我并不完全看得出其中的区别。
Path.Combine
相较于完美工作的字符串连接,有什么更出色的表现吗?
我猜它在后台执行的是非常类似的操作。
有人能告诉我为什么经常会被优先选择使用吗?
Path.Combine
使用Path.PathSeparator
,并检查第一个路径是否已经在末尾有分隔符,以避免重复分隔符。此外,它还检查合并的路径元素是否存在无效字符。
以下是实现方式:
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);
}
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.Combine
内部使用+-运算符
进行字符串连接。 private 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;
}
您需要避免使用双斜线。如果路径元素已经有一个前导反斜杠,Path.Combine会检查并确保只有一个斜杠存在。
string virtualPath = "/data/directory" +"/" + "video.mp4";
string virtualPath = Path.Combine("/data/directory", "video.mp4");
Path.Combine
зљ„д»Јз ЃењЁдЅїз”ЁMono时可以在Linuxе’ЊMacдёЉж— йњЂж›ґж”№еЌіеЏЇе·ҐдЅњгЂ‚ - Enigmativity