相対ディレクトリパスから絶対ディレクトリパスを取得する
結論を先にかくと Path.GetFullPath(); を利用します。下記のコードを試してみてください。
フォームに下記のコントロールを張り付けて OnClick イベントを用意してください。
button0
button1
button2
button3
using System.IO; を忘れないように
using System;
using System.Windows.Forms;
using System.IO; // これを忘れないように.
namespace aaa
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button0_Click( object sender, EventArgs e )
{
DirectoryInfo di0 = new DirectoryInfo( Application.StartupPath );
String strA = di0.FullName;
String strB = Path.GetFullPath( "./" );
const String CAPTION = "ドットひとつ";
MessageBox.Show( $"{strA}\r\n{strB}", CAPTION );
}
private void button1_Click( object sender, EventArgs e )
{
DirectoryInfo di0 = new DirectoryInfo( Application.StartupPath );
DirectoryInfo di1 = di0.Parent;
String strA = di1.FullName;
String strB = Path.GetFullPath( "../" );
String CAPTION = "ドットふたつが1回";
MessageBox.Show( $"{strA}\r\n{strB}", CAPTION );
}
private void button2_Click( object sender, EventArgs e )
{
DirectoryInfo di0 = new DirectoryInfo( Application.StartupPath );
DirectoryInfo di1 = di0.Parent;
DirectoryInfo di2 = di1.Parent;
String strA = di2.FullName;
String strB = Path.GetFullPath( "../../" );
String CAPTION = "ドットふたつが2回";
MessageBox.Show( $"{strA}\r\n{strB}", CAPTION );
}
private void button3_Click( object sender, EventArgs e )
{
DirectoryInfo di0 = new DirectoryInfo( Application.StartupPath );
DirectoryInfo di1 = di0.Parent;
DirectoryInfo di2 = di1.Parent;
DirectoryInfo di3 = di2.Parent;
String strA = di3.FullName;
String strB = Path.GetFullPath( "../../../" );
String CAPTION = "ドットふたつが3回";
MessageBox.Show( $"{strA}\r\n{strB}", CAPTION );
}
}
}
これを実行すると
button0_Click の場合のメッセージボックス表示は
C:\tmp\sss\aaa\bin\Debug
C:\tmp\sss\aaa\bin\Debug\
button1_Click の場合のメッセージボックス表示は
C:\tmp\sss\aaa\bin
C:\tmp\sss\aaa\bin\
button2_Click の場合のメッセージボックス表示は
C:\tmp\sss\aaa
C:\tmp\sss\aaa\
button3_Click の場合のメッセージボックス表示は
C:\tmp\sss
C:\tmp\sss\
以上のようになり、ひとつづつディレクトリをさかのぼっていることがお分かりになるでしょうか?