¿Cómo puedo convertir "c: \ foo \ .. \ bar" en "c: \ bar"?.Net - Eliminar puntos de la ruta
Respuesta
string path = Path.GetFullPath("C:\\foo\\..\\bar"); // path = "C:\\bar"
creo que lo que estás buscando es Syetem.IO.Path
, ya que proporciona los métodos para hacer frente a varias cuestiones relativas a caminos genéricos, incluso rutas de Internet.
No es una respuesta directa, pero de la pregunta sospecho que está tratando de reinventar el método System.IO.Path.Combine(). Eso debería eliminar la necesidad de crear rutas como la que está preguntando en general.
Try System.IO.Path.GetFullPath (@ "c: \ foo .. \ bar")
¿Usted ha intentado
string path = Path.GetFullPath(@"C:\foo\..\bar");
en C# utilizando la clase System.IO.Path?
Uso Path.GetFullPath
En caso de que desee hacerlo usted mismo, usted puede utilizar este código:
var normalizePathRegex = new Regex(@"\[^\]+\..");
var path = @"C:\lorem\..\ipsum"
var result = normalizePathRegex.Replace(unnormalizedPath, x => string.Empty);
URL y caminos de estilo UNIX:
var normalizePathRegex = new Regex(@"/[^/]+/..");
var path = @"/lorem/../ipsum"
var result = normalizePathRegex.Replace(unnormalizedPath, x => string.Empty);
Nota: Recuerde use RegexOptions.Compiled al utilizar este código en una aplicación real
Yo quería preservar el camino de relativo sin convertirlos en ruta absoluta, también quería apoyar a ambos - ventanas y saltos de línea de estilo Linux (\ o /) - así que he se le ocurrió siguiente fórmula aplicación & prueba:
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
class Script
{
/// <summary>
/// Simplifies path, by removed upper folder references "folder\.." will be converted
/// </summary>
/// <param name="path">Path to simplify</param>
/// <returns>Related path</returns>
static String PathSimplify(String path)
{
while (true)
{
String newPath = new Regex(@"[^\\/]+(?<!\.\.)[\\/]\.\.[\\/]").Replace(path, "");
if (newPath == path) break;
path = newPath;
}
return path;
}
[STAThread]
static public void Main(string[] args)
{
Debug.Assert(PathSimplify("x/x/../../xx/bbb") == "xx/bbb");
// Not a valid path reference, don't do anything.
Debug.Assert(PathSimplify(@"C:\X\\..\y") == @"C:\X\\..\y");
Debug.Assert(PathSimplify(@"C:\X\..\yy") == @"C:\yy");
Debug.Assert(PathSimplify(@"C:\X\..\y") == @"C:\y");
Debug.Assert(PathSimplify(@"c:\somefolder\") == @"c:\somefolder\");
Debug.Assert(PathSimplify(@"c:\somefolder\..\otherfolder") == @"c:\otherfolder");
Debug.Assert(PathSimplify("aaa/bbb") == "aaa/bbb");
}
}
Eliminar referencias de carpetas superiores adicionales si alguna
Como regla general: con cada expresión regular que introduzca, introduce otro problema. Esta regla se aplica aquí: 'C: \ X \\ .. \ y -> .. \ y',' C: \ X \ Y \ Z \\\ .. \ y -> C: \ X \\ .. \ y'. –
Ah, mi error. ''. coincide con cualquier personaje, mientras que realmente quise decir punto. Así que el punto debe ser escapado. Solucionado en la respuesta anterior. Pero para su caso, la ruta no será modificada, porque hay doble barra antes de puntos. "\\ ..". Desde mi perspectiva, no es una ruta válida y mejor mantenerla como estaba. – TarmoPikaro
Pero mis ejemplos demuestran que las rutas _han cambiado_. Y las barras invertidas dobles son, hasta donde sé, válidas por definición. –
- 1. SVG: ¿simplifica la ruta para eliminar curvas?
- 2. Javascript/jQuery: eliminar forma/ruta del lienzo
- 3. Xcode + eliminar todos los puntos de interrupción
- 4. Cómo eliminar puntos de interrupción en XCode
- 5. ¿Qué significan los puntos en la ruta relativa del archivo?
- 6. "Acceso a la ruta ... denegado" (.NET C#)
- 7. Error al asignar la ruta '/'. .net 4.0
- 8. ¿La ruta UNC no funciona con .NET?
- 9. ¿Alguien tiene puntos de referencia de componentes .NET Excel IO?
- 10. ¿Cómo encontrar puntos calientes de rendimiento en la aplicación .Net?
- 11. RegExp, Eliminar puntos en las etiquetas
- 12. Eliminar ruta de las variables de entorno
- 13. ¿Cómo eliminar una ruta de gema?
- 14. Eliminar ruta del nombre de archivo
- 15. eliminar ruta con el mapa de google
- 16. cómo calcular los puntos de control para una ruta sin problemas dado un conjunto de puntos?
- 17. url semántica con puntos en .net
- 18. Eliminar un directorio de la ruta completa del directorio
- 19. Google Maps y muchos puntos de ruta (polilínea larga)
- 20. englobamiento/expansión nombre de ruta con dos puntos como separador
- 21. Reflexión usando cadenas de ruta en .NET
- 22. ¿Cómo funciona la resolución de ruta predeterminada/relativa en .NET?
- 23. Obteniendo la ruta del directorio de .NET Framework
- 24. ¿Cómo convierto una ruta relativa a una ruta completa en C#/.NET?
- 25. Ruta de Android a matriz: ¿leer los puntos en una ruta?
- 26. Eliminar puntos de datos debajo de una curva con python
- 27. ¿Cómo eliminar puntos de código inválidos de una cadena?
- 28. Optimización del algoritmo - Ruta más corta entre varios puntos
- 29. Android: para trazar una ruta entre dos puntos geográficos
- 30. ¿Las URL pueden contener puntos en la parte de la ruta?
Path.Combine no resuelve "...", simplemente concatena dos rutas usando un único separador de ruta (dependiendo de la plataforma). –