ほとんどの回答が不完全であるか、またはスタッフが、クエリ文字列/ハッシュ(パスの後に来て対処していない:より良い方法は、http URLのためにこれを行うにはUri.AbsolutePath
正しい方法を使用することです)。
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 –
うん、あなたがロールアップしているように見えるかもしれないほどシンプルなので、Uriクラスにはプレロールされたパース/検証/エンコード用のグッズがたくさんあります。 – STW
右ですが、ファイル名が必要です。完全なファイルパスではありません。私はまだUri.LocalPathでその踏み台をしていますか? – paulwhit