У меня есть этот метод для получения имени файла из строки URI. Что я могу сделать, чтобы сделать его более надежным?
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
приведет кfile1.txt?a=b
Uri.IsFile не работает с URL-адресами http. Это работает только для "file: //". Из MSDN : «Свойство IsFile имеет значение true, если свойство Scheme равно UriSchemeFile». Таким образом, вы не можете зависеть от этого.
источник
Uri.IsFile
для проверки URL-адреса / схемы http, вы можете успешно извлечь имя файла из http-адреса с помощьюSystem.IO.Path.GetFileName(url);
Большинство других ответов либо неполные, либо не имеют дело с вещами, идущими после пути (строка запроса / хэш).
Результаты теста:
источник
GetFileNameFromUrl("test")
привести"test.xml"
к опечатке?Принятый ответ проблематичен для http URL. Более того
Uri.LocalPath
, специфичные для Windows преобразования и, как кто-то указал, оставляют там строки запроса. Лучше использоватьUri.AbsolutePath
Правильный способ сделать это для http URL:
источник
http://example.com/dir/hello%20world.txt
возвращалось бы,hello%20world.txt
аUri.LocalPath
подход возвращалсяhello world.txt
Я думаю, что это будет делать то, что вам нужно:
источник
Uri.UnescapeDataString()
для изменения% 20 и + на пробелы).Это предполагает, конечно, что вы проанализировали имя файла.
РЕДАКТИРОВАТЬ № 2:
Это должно обрабатывать пробелы и тому подобное в имени файла.
источник
это мой образец, который вы можете использовать:
Использование:
источник
Просто и понятно:
источник