パスからファイル名を抽出するにはGetFileNameメソッド、ディレクトリ名を抽出するにはGetDirectoryNameメソッドを使います。
GetFileName・GetDirectoryNameメソッドでは、パスに含まれる一番最後のディレクトリ区切り文字の位置を区切りとして、ファイル名・ディレクトリ名を抽出します。 パスに該当する部分がないと判断される場合は、空の文字列が返されます。
Path.GetFileName/GetDirectoryNameメソッドでファイル名/ディレクトリ名を抽出する
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" ' ファイル名のみのパス
}
Console.WriteLine("path = {0}", p)
Console.WriteLine("file = {0}", Path.GetFileName(p)) ' パスからファイル名を抽出
Console.WriteLine("directory = {0}", Path.GetDirectoryName(p)) ' パスからディレクトリ名を抽出
Console.WriteLine()
Next
End Sub
End Class
実行結果
path = E:\dir\subdir\file.txt file = file.txt directory = E:\dir\subdir path = /dir/subdir/file.txt file = file.txt directory = \dir\subdir path = .\dir\subdir\file.txt file = file.txt directory = .\dir\subdir path = ./dir/subdir/file.txt file = file.txt directory = .\dir\subdir path = file.txt file = file.txt directory =
実行結果
path = E:\dir\subdir\file.txt file = E:\dir\subdir\file.txt directory = path = /dir/subdir/file.txt file = file.txt directory = /dir/subdir path = .\dir\subdir\file.txt file = .\dir\subdir\file.txt directory = path = ./dir/subdir/file.txt file = file.txt directory = ./dir/subdir path = file.txt file = file.txt directory =
GetFileName・GetDirectoryNameメソッドは、ファイル名・ディレクトリ名の抽出に際して、それが実際にファイルであるか、ディレクトリであるかを検証しません。 そのため、次の例のようにディレクトリ区切り文字で終わっていないパスは、仮にそれがディレクトリを表すものであってもファイル名として扱われる点に注意が必要です。 逆に言えば、ディレクトリ区切り文字で終わっていない限り、パスの最後の部分は必ずファイル名として扱われます。
パスがディレクトリ区切り文字で終端されているかどうかを調べる、あるいはパス末尾のディレクトリ区切り文字を除去するには、EndsInDirectorySeparatorメソッド・TrimEndingDirectorySeparatorメソッドを使います。