Tengo este método para tomar el nombre del archivo de un URI de cadena. ¿Qué puedo hacer para que sea más robusto?
private string GetFileName(string hrefLink)
{
string[] parts = hrefLink.Split('/');
string fileName = "";
if (parts.Length > 0)
fileName = parts[parts.Length - 1];
else
fileName = hrefLink;
return fileName;
}
http://www.test.com/file1.txt?a=b
resultará enfile1.txt?a=b
Uri.IsFile no funciona con URL http. Solo funciona para "archivo: //". Desde MSDN : "La propiedad IsFile es verdadera cuando la propiedad Scheme es igual a UriSchemeFile". Entonces no puedes depender de eso.
fuente
Uri.IsFile
a prueba en una dirección URL http / esquema, se puede extraer con éxito el nombre de archivo de una URL http usandoSystem.IO.Path.GetFileName(url);
La mayoría de las otras respuestas están incompletas o no se ocupan de las cosas que siguen a la ruta (cadena de consulta / hash).
Resultados de la prueba:
fuente
GetFileNameFromUrl("test")
resultaría en"test.xml"
O es solo un error tipográfico?La respuesta aceptada es problemática para las URL http. Además,
Uri.LocalPath
realiza conversiones específicas de Windows y, como alguien señaló, deja cadenas de consulta allí. Una mejor manera es usarUri.AbsolutePath
La forma correcta de hacer esto para las URL http es:
fuente
http://example.com/dir/hello%20world.txt
esta volvería,hello%20world.txt
mientras que elUri.LocalPath
enfoque volveríahello world.txt
Creo que esto hará lo que necesitas:
fuente
Uri.UnescapeDataString()
para cambiar% 20 y + a espacios).Esto supone, por supuesto, que ha analizado el nombre del archivo.
EDITAR # 2:
Esto debería manejar espacios y similares en el nombre del archivo.
fuente
esta es mi muestra que puedes usar:
Uso:
fuente
Simple y directo:
fuente