¿Existe un método para verificar si la ruta dada es la ruta completa? Ahora mismo estoy haciendo esto:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
¿Pero debe haber una forma más elegante de comprobar esto?
c#
.net
validation
path
hs2d
fuente
fuente
IsPathRooted
: evitar el acceso al sistema de archivos o lanzar excepciones para entradas no válidas.IsPathRooted
, ciertamente no era nada significativo. LaGetFullPath
línea se incluyó para que se pudiera observar el camino que se está evaluandoLa condición anterior:
false
en la mayoría de los casos donde el formato depath
no es válido (en lugar de lanzar una excepción)true
solo sipath
incluye el volumenEn escenarios como el que planteó el OP, por lo tanto, puede ser más adecuado que las condiciones en las respuestas anteriores. A diferencia de la condición anterior:
path == System.IO.Path.GetFullPath(path)
arroja excepciones en lugar de regresarfalse
en estos escenarios:System.IO.Path.IsPathRooted(path)
devuelvetrue
sipath
comienza con un solo separador de directorio.Finalmente, aquí hay un método que envuelve la condición anterior y también excluye las posibles excepciones restantes:
EDITAR: EM0 hizo un buen comentario y respuesta alternativa abordando el curioso caso de caminos como
C:
yC:dir
. Para ayudar a decidir cómo desea manejar tales rutas, es posible que desee profundizar en MSDN -> Aplicaciones de escritorio de Windows -> Desarrollar -> Tecnologías de escritorio -> Acceso y almacenamiento de datos -> Sistemas de archivos locales - -> Administración de archivos -> Acerca de la administración de archivos -> Creación, eliminación y mantenimiento de archivos -> Asignación de nombres a archivos, rutas y espacios de nombres -> Rutas totalmente calificadas frente a rutas relativasfuente
Tratar
Funciona tanto para rutas UNC como locales.
P.ej
fuente
Pregunta antigua, pero una respuesta más aplicable. Si necesita asegurarse de que el volumen esté incluido en una ruta local, puede usar System.IO.Path.GetFullPath () así:
fuente
GetFullPath
accede al sistema de archivos y puede generar una serie de posibles excepciones. Vea mi respuesta ( stackoverflow.com/a/35046453/704808 ) para ver una alternativa que aún garantiza una ruta completa.Basándose en la respuesta de weir : esto no arroja rutas no válidas, sino que también devuelve
false
rutas como "C:", "C: dirname" y "\ ruta".Tenga en cuenta que esto arroja resultados diferentes en Windows y Linux, por ejemplo, "/ ruta" es absoluto en Linux, pero no en Windows.
Prueba de unidad:
fuente
Para verificar si una ruta está completamente calificada (MSDN) :
Es un poco más simple de lo que ya se ha propuesto y todavía devuelve falso para rutas relativas a unidades como
C:foo
. Su lógica se basa directamente en la definición de MSDN de "totalmente calificado", y no he encontrado ningún ejemplo en el que se comporte mal.Curiosamente, sin embargo, .NET Core 2.1 parece tener un nuevo método
Path.IsPathFullyQualified
que utiliza un método internoPathInternal.IsPartiallyQualified
(la ubicación del enlace es precisa a partir de 2018-04-17).Para la posteridad y una mejor autocontención de esta publicación, aquí está la implementación de esta última como referencia:
fuente
Esta es la solución que uso
Funciona de la siguiente manera:
fuente
C:\foo\..\foo
oC:\foo\.\.\.
Llame a la siguiente función:
Documento de MSDN: Método Path.IsPathFullyQualified
La cita útil del documento de MSDN sigue:
fuente
No estoy realmente seguro de lo que quiere decir con ruta completa (aunque asumiendo del ejemplo que quiere decir no relativo desde la raíz en adelante), bueno, puede usar la clase Path para ayudarlo a trabajar con rutas físicas del sistema de archivos, que deberían cubrir usted para la mayoría de las eventualidades.
fuente