usar - string to path c#
¿Cuál es la ventaja de usar Path.Combine sobre la concatenación de cadenas con ''+''? (5)
Aquí está la implementación
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;
}
No veo la diferencia.
¿Qué podría hacer
Path.Combine
mejor que la concatenación de cadenas que funciona perfectamente?
Supongo que está haciendo algo muy similar en el fondo.
¿Alguien puede decirme por qué es tan frecuente?
De acuerdo con esta
documentation
Path.Combine
realiza internamente una concatenación de cadenas usando
+-Operator
.
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;
}
Evita los separadores de doble camino. Si un elemento de ruta ya tiene una barra diagonal inversa inicial. Path.Combine comprueba eso y garantiza que solo haya una barra invertida.
Path.Combine
hace más cosas que solo una concatenación de cadenas.
Si nos fijamos en el
código fuente
;
Path.Combine
usa
Path.PathSeparator
y comprueba si la primera ruta ya tiene un separador al final para que no duplique los separadores.
Además, verifica si los elementos de la ruta a combinar tienen caracteres no válidos.