Por ejemplo, si tengo¿Cómo puedo obtener un directorio de un Uri
¿Cómo puedo obtener
soy buscando una llamada de función .NET.
Por ejemplo, si tengo¿Cómo puedo obtener un directorio de un Uri
¿Cómo puedo obtener
soy buscando una llamada de función .NET.
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];
}
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.
¿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'
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);
que tenía algo muy similar, pero me gusta esto mucho ¡Mejor, ya que tiene una llamada de función menos! –
¡esta es una roca! –
¡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. –
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!)
¿Qué hace Dump()? Esta solución no se compila aquí. – pyrocumulus
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
No quedan más votos: | – pyrocumulus
verifique la respuesta de Rubens Farias a continuación, ya que es mucho mejor que esta. – bigbearzhu