上の階層のディレクトリパスを取得する

あるディレクトリの、ひとつ上や、ふたつ上のディレクトリを参照したい場合、コマンドプロンプトのシェルでは ../ とか ../../ のように打ち込めば参照できます。これと同じようなことをプログラムで実現するには System.IO の中で定義されている DirectoryInfo クラスを使います。そのプロパティの Parent を参照しましょう。

ルートディレクトリよりも上の階層を Parent で取得しようとすると、例外が発生するので try...catch で囲んで実行するとよいでしょう。

private void menuDebugExec000_Click( object sender, RoutedEventArgs e )
{

	// EXEのパスを取得する.
	String fp_exe = System.Reflection.Assembly.GetExecutingAssembly().Location;

	// この例ではEXEが配置されているディレクトリを基準にする.
	String dir = System.IO.Path.GetDirectoryName( fp_exe );

	System.IO.DirectoryInfo di0 = new System.IO.DirectoryInfo( dir );
	System.IO.DirectoryInfo di1 = di0.Parent;
	System.IO.DirectoryInfo di2 = di1.Parent;
	System.IO.DirectoryInfo di3 = di2.Parent;

	// ルートディレクトリよりも上の階層を取得しようとすると例外が発生する.

	StringBuilder sb = new StringBuilder();
	sb.AppendLine( di0.FullName ); // 基準のディレクトリ.
	sb.AppendLine( di1.FullName ); // ひとつ上の階層.
	sb.AppendLine( di2.FullName ); // ふたつ上の階層.
	sb.AppendLine( di3.FullName ); // みっつ上の階層.

	String str = sb.ToString().Trim();

	MessageBox.Show( str );

}