2009-10-23 6 views

Respuesta

2

No hay ninguna propiedad pero no es demasiado difícil de analizar a cabo:

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

verifique la respuesta de Rubens Farias a continuación, ya que es mucho mejor que esta. – bigbearzhu

0

Si está seguro de que un nombre de archivo está al final de la URL, funcionará el siguiente código.

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 

que añade un poco de chatarra a la cadena de consulta de la dirección URL para demostrar que todavía funciona cuando se añaden parámetros.

1

¿Qué pasa con la manipulación simple de cadenas?

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

probar este (sin manipulación de cadenas):

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

que tenía algo muy similar, pero me gusta esto mucho ¡Mejor, ya que tiene una llamada de función menos! –

+1

¡esta es una roca! –

+0

¡Un método realmente agradable! Si la dirección base es un directorio, debe usar ".." en lugar de ".". Además, en ese caso, tenga cuidado porque no se producirá ninguna excepción si intenta obtener el elemento primario del directorio raíz; solo recuperas el mismo Uri. –

12

Aquí está una manera bastante limpia de hacerlo. También tiene la ventaja de tomar cualquier URL que puede lanzar en él:

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: método de vaciado eliminado(). (Es de LINQPad que era donde estaba verificando esto!)

+0

¿Qué hace Dump()? Esta solución no se compila aquí. – pyrocumulus

+0

Funciona bien sin la llamada Dump(). +1 por tener una buena solución limpia que funciona para cada url (incluso sin un nombre de archivo). – pyrocumulus

+0

No quedan más votos: | – pyrocumulus

Cuestiones relacionadas