Eu tenho esse método para pegar o nome do arquivo de um URI de seqüência de caracteres. O que posso fazer para torná-lo mais 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á emfile1.txt?a=b
Uri.IsFile não funciona com URLs http. Funciona apenas para "file: //". Do MSDN : "A propriedade IsFile é verdadeira quando a propriedade Scheme é igual a UriSchemeFile." Então você não pode depender disso.
fonte
Uri.IsFile
para testar um URL / esquema http, é possível extrair com êxito o nome do arquivo de um URL http usandoSystem.IO.Path.GetFileName(url);
A maioria das outras respostas está incompleta ou não lida com coisas que vêm após o caminho (string de consulta / hash).
Resultado dos testes:
fonte
GetFileNameFromUrl("test")
resultaria em"test.xml"
Ou isso é apenas um erro de digitação?A resposta aceita é problemática para URLs http. Além disso,
Uri.LocalPath
faz conversões específicas do Windows e, como alguém apontou, deixa as strings de consulta lá. Uma maneira melhor é usarUri.AbsolutePath
A maneira correta de fazer isso para URLs http é:
fonte
http://example.com/dir/hello%20world.txt
isso iria retornarhello%20world.txt
ao passo que aUri.LocalPath
abordagem voltariahello world.txt
Eu acho que isso fará o que você precisa:
fonte
Uri.UnescapeDataString()
para alterar% 20 e + para espaços).Isso pressupõe, é claro, que você analisou o nome do arquivo.
EDIT # 2:
Isso deve lidar com espaços e similares no nome do arquivo.
fonte
esta é minha amostra, você pode usar:
Uso:
fonte
Simples e direto:
fonte