[筆記]Winform上使用多個OpenFileDialog() 目錄設定問題

  • 3542
  • 0

摘要:[筆記]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;
        }

這樣就可以解決了。