親ディレクトリのパスを取得する - C#
C#で一つ上の階層のフォルダーのパスを取得するコードを紹介します。
概要
フォルダのパスが与えられた場合に、親ディレクトリ(一つ上の階層)のフォルダーのパスを取得したい場合があります。
この記事では、C#で親ディレクトリのパスを取得するコードを紹介します。
方法は2通りあり、DirectoryInfo を利用する方法と、Directory クラスのGetParentメソッドを利用する方法を紹介します。
プログラム:DirectoryInfo を利用する
UI
下図のフォームを作成します。テキストボックスを2つ、ボタンを2つ、folderBrowserDialogを配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace GetParentDirectory
{
public partial class FormDirectoryInfo : Form
{
public FormDirectoryInfo()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(textBox1.Text);
string ParentPath = di.Parent.FullName;
textBox2.Text = ParentPath;
}
}
}
解説
上部のボタン(button1)のクリックイベントの処理です。folderBrowserDialog を表示し、ディレクトリの選択ダイアログを表示します。
ディレクトリが選択されたら、上部のテキストボックスに選択したディレクトリのフルパスを表示します。
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
下のボタン(button2)のクリックイベントの処理です。初めにDirectoryInfo オブジェクトを作成します。
DirectoryInfoのコンストラクタの引数に上部のテキストボックス(textBox1)に入力された文字列を与えます。
親ディレクトリの情報はDirectoryInfo オブジェクトのParentオブジェクトに設定されています。
PaerentオブジェクトのFullName プロパティにアクセスすると、親のディレクトリのフルパスを取得できます。
取得したパスの文字列を下部のテキストボックス(textrBox2) に表示します。
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(textBox1.Text);
string ParentPath = di.Parent.FullName;
textBox2.Text = ParentPath;
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
上部の[button1]をクリックします。下図のフォルダ選択のダイアログが表示されます。フォルダを選択します。
選択したフォルダのパスが上部のテキストボックスに表示されます。
[button2]をクリックします。下部のテキストボックスに上部のテキストボックスのパスの親ディレクトリのパスが表示されます。
なお、上部のテキストボックスに実際には存在しないパスを入力して、処理を実行する場合の結果も確認します。
上部のテキストボックスに存在しないパスの文字列を入力します。入力後[button2]をクリックします。
上部のテキストボックスに入力したパスの親ディレクトリにあたるパスが下部のテキストボックスに表示されます。
ローカルマシン上に存在しないパスを入力した場合でも、親ディレクトリのパスの文字列を取得できることが確認できました。
プログラム:DirectoryInfo を利用する
UI
下図のフォームを作成します。テキストボックスを2つ、ボタンを2つ、folderBrowserDialogを配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace GetParentDirectory
{
public partial class FormDirectory : Form
{
public FormDirectory()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = Directory.GetParent(textBox1.Text);
textBox2.Text = di.FullName;
}
}
}
解説
上部のボタン(button1)のクリックイベントの処理です。folderBrowserDialog を表示し、ディレクトリの選択ダイアログを表示します。
ディレクトリが選択されたら、上部のテキストボックスに選択したディレクトリのフルパスを表示します。
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
下のボタン(button2)のクリックイベントの処理です。
Diretory クラスの
GetParent()
メソッドを呼び出します。メソッドの第一引数にディレクトリのパスを与えます。
GetParentメソッドの戻り値は、DirectoryInfoオブジェクトとなるため、結果を格納する DirectoryInfo オブジェクトにGetParentメソッドの戻り値を代入します。
親ディレクトリのパスは、戻り値のDirectoryInfoオブジェクトのFullNameプロパティに格納されていますので、この値を下部のテキストボックスに表示します。
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = Directory.GetParent(textBox1.Text);
textBox2.Text = di.FullName;
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
上部の[button1]ボタンをクリックします。下図のディレクトリ選択ダイアログボックスが表示されます。フォルダを選択します。
フォルダを選択すると、上部のテキストボックスに選択したディレクトリのパスが表示されます。
[button2]をクリックします。ボタンをクリックすると、下部のテキストボックスに入力したパスの親ディレクトリにあたるパスが表示されます。
実際に存在しないパスを与えた場合の動作も確認します。上部のテキストボックスに実際にはないディレクトリのパスを入力します。
上部のテキストボックスに入力後、[button2]ボタンをクリックします。
下部のテキストボックスに上部のテキストボックスに入力した、パスの親ディレクトリにあたるパスが表示されます。
指定したパスの親ディレクトリのパスを取得できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用