net getfilename combine asp c# .net unix path

c# - getfilename - System.IO.Path o uso equivalente con rutas Unix



path combine c# (3)

En este caso, usaría la clase System.Uri o System.UriBuilder .

Nota al margen: si ejecuta su código .NET en un sistema Linux con Mono-Runtime, la clase Path debería devolver su comportamiento esperado. La información que usa la clase Path la proporciona el sistema subyacente.

¿Es posible usar la clase System.IO.Path u otro objeto similar para formatear una ruta de estilo de Unix, proporcionando una funcionalidad similar a la clase PATH? Por ejemplo, puedo hacer:

Console.WriteLine(Path.Combine("c://", "windows"));

El cual muestra:

"C://windows"

Pero si intento algo similar con las barras diagonales (/) simplemente las invierte para mí.

Console.WriteLine(Path.Combine("/server", "mydir"));

El cual muestra:

"/server//mydir"


Tienes problemas mayores, Unix acepta caracteres en un nombre de archivo que Windows no permite. Este código bombardeará con ArgumentException, "Caracteres ilegales en la ruta":

string path = Path.Combine("/server", "accts|payable");

No puede usar Path.Combine () de manera confiable para rutas Unix.


Path.Combine utiliza los valores de Path.DirectorySeperatorChar y Path.VolumeSeparatorChar , y estos están determinados por las bibliotecas de clases en el tiempo de ejecución, por lo que si escribe su código utilizando solo Path.Combine calls, Environment.SpecialFolder values, etc. correrá bien en todas partes, ya que Mono (y presumiblemente cualquier .NET runtime) implementa la forma nativa de obtener y construir esas rutas para cualquier plataforma en la que se ejecute. (Su segundo ejemplo, por ejemplo, devuelve /server/mydir para mí, pero el primer ejemplo da c://windows )

Si desea una ruta específica de UNIX codificada en todos los casos, Path.Combine no le está comprando nada: Console.WriteLine ("/server/mydir"); hace lo que quiere en el OP.

Sin embargo, como dijo Hans, los diferentes sistemas de archivos tienen diferentes reglas para los caracteres permitidos, longitudes de ruta, etc., así que la mejor práctica, como con cualquier programación multiplataforma, es restringirse a usar la intersección de las características permitidas entre los sistemas de archivos que '' re targeting. Mire los problemas de sensibilidad a las mayúsculas también.