HasExtensionメソッドを使うことで、パスの表すファイル部分が、拡張子を持つかどうかを調べることができます。 HasExtensionメソッドでは、パスにファイル名がない場合でも例外にはならず、単に拡張子がないものとしてFalseが返されます。
ファイル名部分のうち、どの部分を拡張子と判断するかの基準はGetExtensionメソッドと同様です。 このため、UNIX系OSで隠しファイルとして扱われるドットファイル(dot file)は、常に拡張子を持つものとして判断されます。
Path.HasExtensionメソッドで拡張子を持つファイル名かどうか調べる
using System;
using System.IO;
class Sample {
static void Main()
{
foreach (var path in new[] {
@"E:\dir\subdir\file.txt", // 絶対パス (Windows形式)
@"/dir/subdir/file.txt", // 絶対パス (UNIX形式)
@".\dir\subdir\file.txt", // 相対パス (Windows形式)
@"./dir/subdir/file.txt", // 相対パス (UNIX形式)
@"file.txt", // ファイル名のみのパス
@"file", // 拡張子のないファイル名
@"file.txt.bak", // ピリオドを二つ以上含むファイル名
@"file.", // ピリオドで終わるファイル名
@"some.dir\", // ピリオドを含むディレクトリ名のパス (Windows形式)
@"some.dir/", // ピリオドを含むディレクトリ名のパス (UNIX形式)
@"dir/.file", // ピリオドで始まるファイル名
@".file", // ピリオドで始まるファイル名
}) {
Console.WriteLine("path = {0}", path);
Console.WriteLine("has ext? {0}", Path.HasExtension(path)); // パスのファイル名が拡張子を含むかどうか
Console.WriteLine();
}
}
}
実行結果
path = E:\dir\subdir\file.txt has ext? True path = /dir/subdir/file.txt has ext? True path = .\dir\subdir\file.txt has ext? True path = ./dir/subdir/file.txt has ext? True path = file.txt has ext? True path = file has ext? False path = file.txt.bak has ext? True path = file. has ext? False path = some.dir\ has ext? False path = some.dir/ has ext? False path = dir/.file has ext? True path = .file has ext? True
実行結果
path = E:\dir\subdir\file.txt has ext? True path = /dir/subdir/file.txt has ext? True path = .\dir\subdir\file.txt has ext? True path = ./dir/subdir/file.txt has ext? True path = file.txt has ext? True path = file has ext? False path = file.txt.bak has ext? True path = file. has ext? False path = some.dir\ has ext? True path = some.dir/ has ext? False path = dir/.file has ext? True path = .file has ext? True