2009-10-23 22 views

risposta

2

Non v'è alcuna proprietà, ma non è troppo difficile da analizzare fuori:

Uri uri = new Uri("http://www.example.com/mydirectory/myfile.aspx"); 
string[] parts = uri.LocalPath.Split('/'); 
if(parts.Length >= parts.Length - 2){ 
    string directoryName = parts[parts.Length - 2]; 
} 
+2

controlla la risposta di Rubens Farias in quanto è molto meglio di questa. – bigbearzhu

0

Se sei sicuro che un nome file si trova alla fine dell'URL, il seguente codice funzionerà.

using System; 
using System.IO; 

Uri u = new Uri(@"http://www.example.com/mydirectory/myfile.aspx?v=1&t=2"); 

//Ensure trailing querystring, hash, etc are removed 
string strUrlCleaned = u.GetLeftPart(UriPartial.Path); 
// Get only filename 
string strFilenamePart = Path.GetFileName(strUrlCleaned); 
// Strip filename off end of the cleaned URL including trailing slash. 
string strUrlPath = strUrlCleaned.Substring(0, strUrlCleaned.Length-strFilenamePart.Length-1); 

MessageBox.Show(strUrlPath); 
// shows: http://www.example.com/mydirectory 

ho aggiunto un po 'di spazzatura per la querystring dell'URL per dimostrare che funziona ancora quando i parametri vengono aggiunti.

1

E la semplice manipolazione delle stringhe?

public static Uri GetDirectory(Uri input) { 
    string path = input.GetLeftPart(UriPartial.Path); 
    return new Uri(path.Substring(0, path.LastIndexOf('/'))); 
} 

// ... 
newUri = GetDirectory(new Uri ("http://www.example.com/mydirectory/myfile.aspx")); 
// newUri is now 'http://www.example.com/mydirectory' 
37

Prova questa (senza manipolazione delle stringhe):

Uri baseAddress = new Uri("http://www.example.com/mydirectory/myfile.aspx?id=1"); 
Uri directory = new Uri(baseAddress, "."); // "." == current dir, like MS-DOS 
Console.WriteLine(directory.OriginalString); 
+0

ho avuto qualcosa di molto simile, ma mi piace così tanto , meglio perché ha una chiamata di funzione in meno! –

+1

questo uno sassi! –

+0

Davvero un buon metodo! Se l'indirizzo di base è una directory, è necessario utilizzare ".." anziché ".". Inoltre, in questo caso, fai attenzione perché non si verificherà alcuna eccezione se cerchi di ottenere il padre della directory root; hai appena recuperato lo stesso Uri. –

12

Ecco un modo abbastanza pulito di farlo. Ha anche il vantaggio di prendere qualsiasi URL è possibile lanciarlo:

var uri = new Uri("http://www.example.com/mydirectory/myfile.aspx?test=1"); 
var newUri = new Uri(uri, System.IO.Path.GetDirectoryName(uri.AbsolutePath)); 

NOTA: rimosso il metodo Dump(). (E 'da LINQPad che era dove stavo verificando questo!)

+0

Che cosa fa Dump()? Questa soluzione non viene compilata qui. – pyrocumulus

+0

Funziona bene senza la chiamata Dump(). +1 per avere una bella soluzione pulita che funziona per ogni URL (anche senza un nome di file). – pyrocumulus

+0

Non sono rimasti più voti: | – pyrocumulus

Problemi correlati