Per esempio, se hoCome posso ottenere una directory da un Uri
Come posso ottenere
Sono cercando una chiamata di funzione .NET.
Per esempio, se hoCome posso ottenere una directory da un Uri
Come posso ottenere
Sono cercando una chiamata di funzione .NET.
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];
}
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.
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'
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);
ho avuto qualcosa di molto simile, ma mi piace così tanto , meglio perché ha una chiamata di funzione in meno! –
questo uno sassi! –
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. –
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!)
Che cosa fa Dump()? Questa soluzione non viene compilata qui. – pyrocumulus
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
Non sono rimasti più voti: | – pyrocumulus
controlla la risposta di Rubens Farias in quanto è molto meglio di questa. – bigbearzhu