HasExtension
クラスのメソッドを使用してSystem.IO.Path
、URIの文字列に拡張子があるかどうかを判別できます。
AbsoluteUri
オブジェクトのプロパティを使用するUri
ことで、URIを表す完全な文字列を取得できます。この文字列をPathクラスのHasExtension
メソッドに渡すと、URIにファイル拡張子が含まれているかどうかを示すブール値が正しく返されます。
次のコードをコピーして単純なコンソールアプリケーションに貼り付け、これをテストします。TrueのみmyUri3
を返します。これは、メソッドがファイル名(および拡張子)の後の追加の文字(つまり、クエリ文字列)を正しく処理できることも示しています。myUrl4
HasExtension
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myURI1 = new Uri(@"http://www.somesite.com/");
Uri myURI2 = new Uri(@"http://www.somesite.com/filenoext");
Uri myURI3 = new Uri(@"http://www.somesite.com/filewithext.jpg");
Uri myURI4 = new Uri(@"http://www.somesite.com/filewithext.jpg?q=randomquerystring");
Console.WriteLine("Does myURI1 have an extension: " + Path.HasExtension(myURI1.AbsoluteUri));
Console.WriteLine("Does myURI2 have an extension: " + Path.HasExtension(myURI2.AbsoluteUri));
Console.WriteLine("Does myURI3 have an extension: " + Path.HasExtension(myURI3.AbsoluteUri));
Console.WriteLine("Does myURI4 have an extension: " + Path.HasExtension(myURI4.AbsoluteUri));
Console.ReadLine();
}
}
}
編集:
拡張機能が有効な拡張機能であるかどうかの判断に関する質問者の編集に基づいて、以下にいくつかの新しいコードを作成しました(コンソールアプリにコピーして貼り付けます)。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myUri1 = new Uri("http://www.somesite.com/folder/file.jpg?q=randomquery.string");
string path1 = String.Format("{0}{1}{2}{3}", myUri1.Scheme, Uri.SchemeDelimiter, myUri1.Authority, myUri1.AbsolutePath);
string extension1 = Path.GetExtension(path1);
Console.WriteLine("Extension of myUri1: " + extension1);
Uri myUri2 = new Uri("http://www.somesite.com/folder/?q=randomquerystring");
string path2 = String.Format("{0}{1}{2}{3}", myUri2.Scheme, Uri.SchemeDelimiter, myUri2.Authority, myUri2.AbsolutePath);
string extension2 = Path.GetExtension(path2);
Console.WriteLine("Extension of myUri1: " + extension2);
Console.ReadLine();
}
}
}
この新しいコードは、Uriオブジェクトのすべてのコンポーネント部分(つまり、 Scheme-http
部分など)を分解し、Uriのクエリ文字列部分を具体的に削除します。これは、クエリ文字列にドット文字が含まれている可能性があるというこの回答へのコメントでAdrianoが指摘しているように、潜在的な問題を回避します(これにより、HasExtension
メソッドが混乱する可能性があります)。
Uriが分解されると、Uri文字列に拡張子があるかどうかと、その拡張子が何であるかを適切に判断できるようになります。
ここからは、この拡張機能を既知の有効な拡張機能のリストと照合する場合にすぎません。この部分は、ファイル拡張子が有効である可能性があるため、.NET Frameworkでは決して提供されないものです(必要に応じて、任意のアプリケーションが独自のファイル拡張子を作成できます)。