摘要:[筆記]Winform上使用多個OpenFileDialog() 目錄設定問題
日前我在寫一個小工具,需要讀多個檔進來處理
因此我使用OpenFileDialog,來讓使用者自行選取需要處理的檔案
程式碼寫法如下:
private void selectFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.ShowDialog();
textFile.Text = fd.FileName;
}
private void selectSpecFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd2 = new OpenFileDialog();
fd2.ShowDialog();
textSpecFile.Text = fd2.FileName;
}
當你沒有特地去設定這兩個OpenFileDialog
打開的就會出現上次選取檔案的目錄
這樣對使用者很不方便,不能直接打開就選取要處理的檔案
還要切換目錄,尤其是這兩種檔案分類在不同目錄的時候
因此,我就把InitialDirectory加上去
程式碼如下:
private void selectFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.InitialDirectory = ".\\data\\";
fd.ShowDialog();
textFile.Text = fd.FileName;
}
private void selectSpecFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd2 = new OpenFileDialog();
fd2.InitialDirectory = ".\\spec\\";
fd2.ShowDialog();
textSpecFile.Text = fd2.FileName;
}
這樣就可以OpenDialog就在正確的目錄了?
結果不如我的預期
當我開啟讀取Data的檔案
不選取的時候,去打開Spec的Dialog是可以到正確的目錄
但是一旦我選取Data的檔案後,
我在打開Spec的Dialog,還是一樣回到Data的目錄,
這樣設定InitialDirectory就沒有用處了
此外這還會影響到FileSystem的Open/Save File
如果我這時候
File.Create("XXX.XML");
File.WriteAllText("XXX.XML", temp);
也是會寫到Data的那個目錄
這樣對檔案的管理相當混亂
因此,要再加上RestoreDirectory
還原檔案目錄的設定
以下是程式碼:
private void selectFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.InitialDirectory = ".\\data\\";
fd.RestoreDirectory = true;
fd.ShowDialog();
textFile.Text = fd.FileName;
}
private void selectSpecFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd2 = new OpenFileDialog();
fd2.InitialDirectory = ".\\spec\\";
fd2.RestoreDirectory = true;
fd2.ShowDialog();
textSpecFile.Text = fd2.FileName;
}
這樣就可以解決了。