大多数的答案是不完整或不与路径之后的东西来(查询字符串/散列处理)。
readonly static Uri SomeBaseUri = new Uri("http://canbeanything");
static string GetFileNameFromUrl(string url)
{
Uri uri;
if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
uri = new Uri(SomeBaseUri, url);
return Path.GetFileName(uri.LocalPath);
}
测试结果:
GetFileNameFromUrl(""); // ""
GetFileNameFromUrl("test"); // "test.xml"
GetFileNameFromUrl("test.xml"); // "test.xml"
GetFileNameFromUrl("/test.xml"); // "test.xml"
GetFileNameFromUrl("/test.xml?q=1"); // "test.xml"
GetFileNameFromUrl("/test.xml?q=1&x=3"); // "test.xml"
GetFileNameFromUrl("test.xml?q=1&x=3"); // "test.xml"
GetFileNameFromUrl("http://www.a.com/test.xml?q=1&x=3"); // "test.xml"
GetFileNameFromUrl("http://www.a.com/test.xml?q=1&x=3#aidjsf"); // "test.xml"
GetFileNameFromUrl("http://www.a.com/a/b/c/d"); // "d"
GetFileNameFromUrl("http://www.a.com/a/b/c/d/e/"); // ""
我同意,你应该真的使用Uri类,因为它已经为你做这个东西。 +1 – 2009-07-09 18:17:52
是的,就像它看起来像你自己的Uri类一样简单,它为你提供了大量的预先解析/验证/编码的好东西。 – STW 2009-07-09 18:23:14
没错,但我只需要文件名,而不是完整的文件路径。我是不是仍然要在Uri.LocalPath上做这一步? – paulwhit 2009-07-10 17:46:52