obtener - En C#, ¿cómo combino más de dos partes de una ruta de archivo a la vez?
obtener ruta de un archivo c# (5)
Para combinar dos partes de una ruta de archivo, puede hacer
System.IO.Path.Combine (path1, path2);
Sin embargo, no puedes hacer
System.IO.Path.Combine (path1, path2, path3);
¿Hay una manera simple de hacer esto?
Aquí hay un método de utilidad que puede usar:
public static string CombinePaths(string path1, params string[] paths)
{
if (path1 == null)
{
throw new ArgumentNullException("path1");
}
if (paths == null)
{
throw new ArgumentNullException("paths");
}
return paths.Aggregate(path1, (acc, p) => Path.Combine(acc, p));
}
Versión alternativa de código de golf (semántica más corta, pero no tan clara, es un poco diferente de Path.Combine
):
public static string CombinePaths(params string[] paths)
{
if (paths == null)
{
throw new ArgumentNullException("paths");
}
return paths.Aggregate(Path.Combine);
}
Entonces puedes llamar esto como:
string path = CombinePaths(path1, path2, path3);
Como han dicho otros, en .NET 3.5 y versiones anteriores no ha habido una manera de hacer esto de forma ordenada, ya sea que tenga que escribir su propio método Combine
o llamar a Path.Combine
varias veces.
Pero regocíjense: en .NET 4.0, existe esta sobrecarga :
public static string Combine(
params string[] paths
)
También hay sobrecargas que toman 3 o 4 cadenas, presumiblemente para que no sea necesario crear una matriz innecesariamente para casos comunes.
Afortunadamente, Mono cargará esas sobrecargas pronto. Estoy seguro de que serían fáciles de implementar y muy apreciadas.
Con la sobrecarga de métodos introducida en .NET 4 Path.Combine(string [])
Path.Combine(new [] { "abc", "def", "ghi", "jkl", "mno" });
No es simple, pero inteligente :)
string str1 = "aaa", str2 = "bbb", str3 = "ccc";
string comb = new string[] { str1, str2, str3 }
.Aggregate((x, y) => System.IO.Path.Combine(x, y));
O:
string CombinePaths(params string[] paths)
{
return paths.Aggregate((x,y) => System.IO.Path.Combine(x, y));
}
No, tienes que llamar a Path.Combine()
varias veces.
Sin embargo, podría escribir un método de ayuda que lo haga por usted:
public static string CombinePaths(params string[] paths) {
if (paths == null) {
return null;
}
string currentPath = paths[0];
for (int i = 1; i < paths.Length; i++) {
currentPath = Path.Combine(currentPath, paths[i]);
}
return currentPath;
}