パスが完全修飾されている(fully-qualified)かどうかを調べるにはIsPathFullyQualifiedメソッドを使うことができます。 このメソッドでは、パスが特定のドライブ/デバイス/ボリューム内のディレクトリ/ファイルを表すものかどうかを判定します。
このため、UNCパスやDOSデバイスパスなど常に完全修飾となる形式のパスや、ドライブ名から始まるパスE:\dirなどの場合にtrue(完全修飾されている)を返します。 ルートディレクトリから始まるパス\dir, /dirなどは、Windows環境ではfalse(完全修飾されていない)が返されます。 非Windows環境では、ルートディレクトリ/から始まるパスに対してはtrue(完全修飾されている)を返します。
このメソッドではあくまでパス形式としての検証のみが行われるため、実在しないドライブ/デバイス/ボリュームの場合でも例外は発生しません。 また非Windows環境では、ルートディレクトリ/から始まるパスのみが完全修飾されているものとして判断され、UNCパスやDOSデバイスパスは解釈されず、完全修飾されていないものと判断されます。
なお、IsPathFullyQualifiedメソッドは.NET Standard 2.1/.NET Core 2.1以降で使用できます。
Path.IsPathFullyQualifiedメソッドで完全修飾されたパスかどうか調べる .NET Standard 2.1/.NET Core 2.1
using System;
using System.IO;
class Sample {
static void Main()
{
foreach (var path in new[] {
@"E:\dir\subdir\file.txt", // 絶対パス (Windows形式)
@"/dir/subdir/file.txt", // 絶対パス (UNIX形式)
@"\\127.0.0.1\e$\dir\file.txt", // UNCパス
@"\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\dir\file.txt", // DOSデバイスパス
@"\dir\subdir\file.txt", // 相対パス (Windows形式・カレントドライブからの相対パス)
@".\dir\subdir\file.txt", // 相対パス (Windows形式・カレントディレクトリからの相対パス)
@"./dir/subdir/file.txt", // 相対パス (UNIX形式)
@"file.txt", // ファイル名のみのパス
}) {
Console.WriteLine("path = {0}", path);
Console.WriteLine("fully qualified? {0}", Path.IsPathFullyQualified(path)); // パスが完全修飾となっているか調べる
Console.WriteLine();
}
}
}
実行結果
path = E:\dir\subdir\file.txt
fully qualified? True
path = /dir/subdir/file.txt
fully qualified? False
path = \\127.0.0.1\e$\dir\file.txt
fully qualified? True
path = \\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\dir\file.txt
fully qualified? True
path = \dir\subdir\file.txt
fully qualified? False
path = .\dir\subdir\file.txt
fully qualified? False
path = ./dir/subdir/file.txt
fully qualified? False
path = file.txt
fully qualified? False
実行結果
path = E:\dir\subdir\file.txt
fully qualified? False
path = /dir/subdir/file.txt
fully qualified? True
path = \\127.0.0.1\e$\dir\file.txt
fully qualified? False
path = \\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\dir\file.txt
fully qualified? False
path = \dir\subdir\file.txt
fully qualified? False
path = .\dir\subdir\file.txt
fully qualified? False
path = ./dir/subdir/file.txt
fully qualified? False
path = file.txt
fully qualified? False