2011-01-25 26 views
51

Tengo archivos xml que contienen rutas de archivos href a las imágenes (por ejemplo, ".... \ images \ image.jpg"). Los hrefs contienen caminos relativos. Ahora, necesito extraer los hrefs a las imágenes y convertirlas en rutas absolutas en el sistema de archivos.Ruta relativa a la ruta absoluta en C#?

Conozco el método GetFullPath, pero lo probé y parece que solo funciona en el conjunto CurrentDirectory, que parece ser C: así que no veo cómo podría usar eso. Y aún así, tengo la ruta absoluta del archivo que contiene hrefs, y las rutas relativas href, así que es una tarea simple para mí contar el número de partes ".... \" basadas en la ruta absoluta de el archivo contenedor, parece que debe haber una manera de hacerlo también programáticamente.

¡Espero que haya algún método simple que simplemente no conozca! ¿Algunas ideas?

+1

¿Es esta una computadora de escritorio o en la web applicaiton? –

+0

Posible duplicado [cómo convertir la ruta relativa a la ruta absoluta en la aplicación de Windows?] (Http://stackoverflow.com/q/1399008/299327). –

Respuesta

71

suponiendo que conoce el directorio real, el archivo XML vive en uso Path.Combine, por ejemplo,

var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg"); 

Si desea volver a la ruta completa con cualquier .. 's colapsaron entonces usted puede utilizar:

Path.GetFullPath((new Uri(absolute_path)).LocalPath); 
+0

Gracias, aparentemente mi problema era que había olvidado obtener primero el directorio del archivo xml, había intentado Combinar, pero con la ruta absoluta del archivo, que no funcionó. No sé cuál de todas estas respuestas fue la primera, el tiempo muestra lo mismo, pero usted indicó que debía obtener el directorio, así que elegí su respuesta. ¡Gracias a todos! – Anders

+6

Con un poco de experimentación, parece que '(new Uri (absolute_path)). LocalPath' hace lo mismo que' Path.GetFullPath (absolute_path) 'por lo que uno u otro deberían ser suficientes. –

3

Puede usar Path.Combine con la ruta "base" y luego con GetFullPath los resultados.

string absPathContainingHrefs = GetAbsolutePath(); // Get the "base" path 
string fullPath = Path.Combine(absPathContainingHrefs, @"..\..\images\image.jpg"); 
fullPath = Path.GetFullPath(fullPath); // Will turn the above into a proper abs path 
5

Ha tratado Server.MapPath método. Aquí hay un ejemplo

string relative_path = "/Content/img/Upload/Reports/59/44A0446_59-1.jpg"; 
string absolute_path = Server.MapPath(relative_path); 
//will be c:\users\.....\Content\img\Upload\Reports\59\44A0446_59-1.jpg 
26

Esto funcionó.

var s = Path.Combine(@"C:\some\location", @"..\other\file.txt"); 
s = Path.GetFullPath(s); 
73
string exactPath = Path.GetFullPath(yourRelativePath); 

obras

+5

esta es la respuesta correcta a la pregunta '¿cómo se convierte una ruta relativa a una ruta absoluta?' el OP solo quería saber la respuesta a '¿cómo te apegas a los caminos juntos?' –

+1

Terminó aquí mientras buscaba la respuesta a esa pregunta. Queda satisfecho – Chris

+1

Al principio pensé que esto no funcionaba, pero lo hace. Si alimenta su ruta relativa de C: \ test \ A \ .. \ B \ test.txt La salida será C: \ test \ B \ test.txt – BraveNewMath

Cuestiones relacionadas