ドライブ名だけを返すメソッドは用意されていませんが、GetPathRootメソッドでパスからルートディレクトリを取得できるので、これを使うことでドライブ名を取得することができます。
ただし、完全修飾されているパスの場合はホスト名を含めたドライブ名までの部分が返されるため、単にドライブ名だけを取得することはできません。 また、カレントドライブからの相対パスの場合も、ドライブのルートディレクトリ\
が返されるため、ドライブ名は取得できません。 ルートディレクトリを含まない相対パスの場合は、空の文字列が返されます。
Path.GetPathRootメソッドでドライブ名・ルートディレクトリを抽出する
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パス
@"\dir\subdir\file.txt", // カレントドライブからの相対パス (Windows形式)
@".\dir\subdir\file.txt", // カレントディレクトリからの相対パス (Windows形式)
@"./dir/subdir/file.txt", // カレントディレクトリからの相対パス (UNIX形式)
@"file.txt", // ファイル名のみのパス
}) {
Console.WriteLine("path = {0}", path);
Console.WriteLine("root = {0}", Path.GetPathRoot(path)); // パスからドライブ名・ルートディレクトリを抽出する
Console.WriteLine();
}
}
}
実行結果
path = E:\dir\subdir\file.txt root = E:\ path = /dir/subdir/file.txt root = \ path = \\127.0.0.1\e$\dir\file.txt root = \\127.0.0.1\e$ path = \dir\subdir\file.txt root = \ path = .\dir\subdir\file.txt root = path = ./dir/subdir/file.txt root = path = file.txt root =
実行結果
path = E:\dir\subdir\file.txt root = path = /dir/subdir/file.txt root = / path = \\127.0.0.1\e$\dir\file.txt root = path = \dir\subdir\file.txt root = path = .\dir\subdir\file.txt root = path = ./dir/subdir/file.txt root = path = file.txt root =
GetPathRootメソッドの詳細な動作については§.ルートディレクトリの取得・ルートディレクトリからのパスかどうか (GetPathRoot/IsPathRooted)を参照してください。