ruta obtener manipular ejemplos directorios archivos archivo c# path relative-path

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; }