2011-01-25 10 views
51

Ho file xml che contengono percorsi di file href alle immagini (ad esempio ".... \ images \ image.jpg"). Gli hrefs contengono percorsi relativi. Ora, ho bisogno di estrarre gli hrefs per le immagini e trasformarle in percorsi assoluti nel file system.Percorso relativo al percorso assoluto in C#?

Conosco il metodo GetFullPath, ma l'ho provato e sembra funzionare solo dal set di CurrentDirectory, che sembra essere C: quindi non vedo come potrei usarlo. E ancora, ho il percorso assoluto del file che contiene gli hrefs e i percorsi relativi href, quindi dal momento che è un compito semplice per me contare il numero di parti ".... \" in base al percorso assoluto di il file contenente, sembra che ci sia un modo per farlo anche programmaticamente.

Spero ci sia un metodo semplice che non conosco! Qualche idea?

+1

È questo un desktop o web applicaiton? –

+0

Possibile duplicato [come convertire il percorso relativo nel percorso assoluto nell'applicazione Windows?] (Http://stackoverflow.com/q/1399008/299327). –

risposta

71

Supponendo che si conosce la vera directory del file XML vive in uso Path.Combine, per esempio

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

Se si desidera ottenere indietro il percorso completo con qualsiasi .. 's crollati allora si può usare:

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

Grazie, il mio problema era apparentemente che avevo dimenticato di ottenere prima la directory del file xml, avevo provato Combine, ma con il percorso assoluto del file, che non funzionava. Non so quale di tutte queste risposte sia stata la prima, l'ora mostra lo stesso, ma tu hai indicato di prendere la directory, quindi ho scelto la tua risposta. Grazie a tutti però! – Anders

+6

Con un po 'di sperimentazione sembra '(nuovo Uri (absolute_path)). LocalPath' fa la stessa cosa di' Path.GetFullPath (absolute_path) 'quindi l'uno o l'altro dovrebbe essere sufficiente. –

3

È possibile utilizzare Path.Combine con il percorso "base", quindi GetFullPath sui risultati.

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

Hai provato Server.MapPath metodo. Ecco un esempio

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

Questo ha funzionato.

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

funziona

+5

questa è la giusta risposta alla domanda "come si converte un percorso relativo in un percorso assoluto?" l'OP voleva solo sapere la risposta a "come ti attacchi ai bit di percorsi insieme?" –

+1

Sono finito qui mentre cercavo la risposta a quella domanda. Rimasto soddisfatto – Chris

+1

All'inizio pensavo che non funzionasse, ma lo è. Se si alimenta il percorso relativo di C: \ test \ A \ .. \ B \ test.txt L'output sarà C: \ test \ B \ test.txt – BraveNewMath