¿Cómo se puede conseguir una ruta de archivo absoluta o normalizada en .NET?

StackOverflow https://stackoverflow.com/questions/1266674

  •  13-09-2019
  •  | 
  •  

Pregunta

¿Cómo puede uno con un mínimo esfuerzo (utilizando alguna instalación ya existente, si es posible) convertir senderos como c:\aaa\bbb\..\ccc a c:\aaa\ccc?

¿Fue útil?

Solución

Path.GetFullPath tal vez?

Otros consejos

Me gustaría escribir así:

public static string NormalizePath(string path)
{
    return Path.GetFullPath(new Uri(path).LocalPath)
               .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
               .ToUpperInvariant();
}

Esto debe manejar algunos escenarios como

  1. URI y el potencial escaparon caracteres en ella, como

      

    file: /// C: /Test%20Project.exe -> C: \ TEST PROJECT.EXE

  2. Los segmentos de trazado especificados por puntos para denotar actual o directorio padre

      

    c: \ aaa \ bbb \ .. \ ccc -> C: \ AAA \ CCC

  3. tilde acortados caminos (largos)

      

    C: \ Progra ~ 1 \ -> C: \ Archivos de programa

  4. directorio inconsistente carácter delimitador

      

    C: / Documents \ abc.txt -> C: \ Documents \ abc.txt

Aparte de estos, se puede ignorar el caso, por detrás directorio \ delimitador de caracteres, etc.

Canonicalización es una de las principales responsabilidades de la Uri clases en .NET.

var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top