パスからファイル名を抽出するにはGetFileNameメソッド、ディレクトリ名を抽出するにはGetDirectoryNameメソッドを使います。

GetFileName・GetDirectoryNameメソッドでは、パスに含まれる一番最後のディレクトリ区切り文字の位置を区切りとして、ファイル名・ディレクトリ名を抽出します。 パスに該当する部分がないと判断される場合は、空の文字列が返されます。

GetFileName・GetDirectoryNameメソッドは、ファイル名・ディレクトリ名の抽出に際して、それが実際にファイルであるか、ディレクトリであるかを検証しません。 そのため、次の例のようにディレクトリ区切り文字で終わっていないパスは、仮にそれがディレクトリを表すものであってもファイル名として扱われる点に注意が必要です。 逆に言えば、ディレクトリ区切り文字で終わっていない限り、パスの最後の部分は必ずファイル名として扱われます。

Path.GetFileName/GetDirectoryNameメソッドではパスがディレクトリ区切り文字で終わるかどうかで結果が変わる
using System;
using System.IO;

class Sample {
  static void Main()
  {
    foreach (var path in new[] {
      @"dir\subdir",  // ディレクトリを表すパス (ディレクトリ区切り文字で終わっていない場合・Windows形式)
      @"dir\subdir\", // ディレクトリを表すパス (ディレクトリ区切り文字で終わっている場合・Windows形式)
      @"dir/subdir",  // ディレクトリを表すパス (ディレクトリ区切り文字で終わっていない場合・UNIX形式)
      @"dir/subdir/", // ディレクトリを表すパス (ディレクトリ区切り文字で終わっている場合・UNIX形式)
    }) {
      Console.WriteLine("path = {0}", path);
      Console.WriteLine("file = {0}", Path.GetFileName(path));
      Console.WriteLine("directory = {0}", Path.GetDirectoryName(path));
      Console.WriteLine();
    }
  }
}
実行結果
path = dir\subdir
file = subdir
directory = dir

path = dir\subdir\
file =
directory = dir\subdir

path = dir/subdir
file = subdir
directory = dir

path = dir/subdir/
file =
directory = dir\subdir

実行結果
path = dir\subdir
file = dir\subdir
directory = 

path = dir\subdir\
file = dir\subdir\
directory = 

path = dir/subdir
file = subdir
directory = dir

path = dir/subdir/
file = 
directory = dir/subdir

パスがディレクトリ区切り文字で終端されているかどうかを調べる、あるいはパス末尾のディレクトリ区切り文字を除去するには、EndsInDirectorySeparatorメソッド・TrimEndingDirectorySeparatorメソッドを使います。