パスの末尾がディレクトリ区切り文字となっているかどうかを調べるにはEndsInDirectorySeparatorメソッドを使うことができます。 また、ディレクトリ区切り文字で終端されているパスから終端のディレクトリ区切り文字をトリミングするにはTrimEndingDirectorySeparatorメソッドを使うことができます。
EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドは、ディレクトリを表すパスの場合は末尾が\
あるいは/
となっていることを要求したい場合、逆にパスがファイルでもディレクトリでも同一の表記で扱いたい場合などに用いることができます。
TrimEndingDirectorySeparatorメソッドは、E:\
,\
,/
などルートディレクトリを表すパスの場合は終端のトリミングは行いません。 そのため、このメソッドを使ってドライブ名(E:
)のみを取得することはできません。
なお、EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドは.NET Standard 2.1/.NET Core 2.1以降で使用できます。
using System;
using System.IO;
class Sample {
static void Main()
{
foreach (var path in new[] {
// ディレクトリパス (Windows形式)
@"E:\dir\subdir\",
@"E:\dir\subdir",
@"E:\",
@"\",
@"dir\subdir\",
@"dir\subdir",
// ディレクトリパス (Unix形式)
@"/",
@"/dir/subdir/",
@"/dir/subdir",
@"dir/subdir/",
@"dir/subdir",
}) {
Console.WriteLine("path = {0}", path);
Console.WriteLine("dir separator? {0}", Path.EndsInDirectorySeparator(path)); // パスがディレクトリ区切り文字で終わるかどうか調べる
Console.WriteLine("trimmed path = {0}", Path.TrimEndingDirectorySeparator(path)); // パス末尾のディレクトリ区切り文字を除去する
Console.WriteLine();
}
}
}
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
EndsInDirectorySeparator・TrimEndingDirectorySeparatorメソッドが使用できない場合は、DirectorySeparatorChar・AltDirectorySeparatorCharフィールドとString.EndsWithメソッド・String.TrimEndメソッドを組み合わせることで同様の処理を行うことができます。