パスの末尾がディレクトリ区切り文字となっているかどうかを調べるにはEndsInDirectorySeparatorメソッドを使うことができます。 また、ディレクトリ区切り文字で終端されているパスから終端のディレクトリ区切り文字をトリミングするにはTrimEndingDirectorySeparatorメソッドを使うことができます。
EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドは、ディレクトリを表すパスの場合は末尾が\
あるいは/
となっていることを要求したい場合、逆にパスがファイルでもディレクトリでも同一の表記で扱いたい場合などに用いることができます。
TrimEndingDirectorySeparatorメソッドは、E:\
,\
,/
などルートディレクトリを表すパスの場合は終端のトリミングは行いません。 そのため、このメソッドを使ってドライブ名(E:
)のみを取得することはできません。
なお、EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドは.NET Standard 2.1/.NET Core 2.1以降で使用できます。
EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドが使用できない場合は、DirectorySeparatorChar・AltDirectorySeparatorCharフィールドとString.EndsWithメソッド・String.TrimEndメソッドを組み合わせることで同様の処理を行うことができます。
String.TrimEnd/EndsWithメソッドを使ってパス末尾のディレクトリ区切り文字を除去する/パス末尾がディレクトリ区切り文字かどうか調べる
Imports System
Imports System.IO
Class Sample
Shared Sub Main()
For Each p As String In New String() {
"E:\dir\subdir\", ' ディレクトリパス (Windows形式)
"E:\dir\subdir",
"E:\",
"\",
"dir\subdir\",
"dir\subdir",
"/", ' ディレクトリパス (Unix形式)
"/dir/subdir/",
"/dir/subdir",
"dir/subdir/",
"dir/subdir"
}
Console.WriteLine("path = {0}", p)
' パスがディレクトリ区切り文字で終わるかどうか調べる
' (Path.EndsInDirectorySeparatorメソッド相当の処理)
Console.WriteLine("dir separator? {0}", p.EndsWith(Path.DirectorySeparatorChar) OrElse p.EndsWith(Path.AltDirectorySeparatorChar))
' パス末尾のディレクトリ区切り文字を除去する
' (Path.TrimEndingDirectorySeparatorメソッド相当の処理、ただし
' この実装ではルートディレクトリを表すパスの場合も末尾の区切り文字が
' 削除されてしまうため、別途対処が必要となる)
Console.WriteLine("trimmed path = {0}", p.TrimEnd(New Char() {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar}))
Console.WriteLine()
Next
End Sub
End Class
実行結果
path = E:\dir\subdir\ dir separator? True trimmed path = E:\dir\subdir path = E:\dir\subdir dir separator? False trimmed path = E:\dir\subdir path = E:\ dir separator? True trimmed path = E: path = \ dir separator? True trimmed path = path = dir\subdir\ dir separator? True trimmed path = dir\subdir path = dir\subdir dir separator? False trimmed path = dir\subdir path = / dir separator? True trimmed path = path = /dir/subdir/ dir separator? True trimmed path = /dir/subdir path = /dir/subdir dir separator? False trimmed path = /dir/subdir path = dir/subdir/ dir separator? True trimmed path = dir/subdir path = dir/subdir dir separator? False trimmed path = dir/subdir
実行結果
path = E:\dir\subdir\ dir separator? False trimmed path = E:\dir\subdir\ path = E:\dir\subdir dir separator? False trimmed path = E:\dir\subdir path = E:\ dir separator? False trimmed path = E:\ path = \ dir separator? False trimmed path = \ path = dir\subdir\ dir separator? False trimmed path = dir\subdir\ path = dir\subdir dir separator? False trimmed path = dir\subdir path = / dir separator? True trimmed path = path = /dir/subdir/ dir separator? True trimmed path = /dir/subdir path = /dir/subdir dir separator? False trimmed path = /dir/subdir path = dir/subdir/ dir separator? True trimmed path = dir/subdir path = dir/subdir dir separator? False trimmed path = dir/subdir