HasExtensionメソッドを使うことで、パスの表すファイル部分が、拡張子を持つかどうかを調べることができます。 HasExtensionメソッドでは、パスにファイル名がない場合でも例外にはならず、単に拡張子がないものとしてFalseが返されます。
ファイル名部分のうち、どの部分を拡張子と判断するかの基準はGetExtensionメソッドと同様です。 このため、UNIX系OSで隠しファイルとして扱われるドットファイル(dot file)は、常に拡張子を持つものとして判断されます。
Path.HasExtensionメソッドで拡張子を持つファイル名かどうか調べる
Imports System
Imports System.IO
Class Sample
Shared Sub Main()
For Each p As String In New String() {
"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}", p)
Console.WriteLine("has ext? {0}", Path.HasExtension(p)) ' パスのファイル名が拡張子を含むかどうか
Console.WriteLine()
Next
End Sub
End Class
実行結果
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