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

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

Path.GetFileName/GetDirectoryNameメソッドでファイル名/ディレクトリ名を抽出する
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形式)
      @".\dir\subdir\file.txt",   // 相対パス (Windows形式)
      @"./dir/subdir/file.txt",   // 相対パス (UNIX形式)
      @"file.txt"                 // ファイル名のみのパス
    }) {
      Console.WriteLine("path = {0}", path);
      Console.WriteLine("file = {0}", Path.GetFileName(path)); // パスからファイル名を抽出
      Console.WriteLine("directory = {0}", Path.GetDirectoryName(path)); // パスからディレクトリ名を抽出
      Console.WriteLine();
    }
  }
}
実行結果
path = E:\dir\subdir\file.txt
file = file.txt
directory = E:\dir\subdir

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

path = .\dir\subdir\file.txt
file = file.txt
directory = .\dir\subdir

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

path = file.txt
file = file.txt
directory =

実行結果
path = E:\dir\subdir\file.txt
file = E:\dir\subdir\file.txt
directory = 

path = /dir/subdir/file.txt
file = file.txt
directory = /dir/subdir

path = .\dir\subdir\file.txt
file = .\dir\subdir\file.txt
directory = 

path = ./dir/subdir/file.txt
file = file.txt
directory = ./dir/subdir

path = file.txt
file = file.txt
directory = 

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

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