パスの末尾がディレクトリ区切り文字となっているかどうかを調べるには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

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。