2012-04-02 3 views
15
using (var openFileDialog1 = new OpenFileDialog()) 
     { 
      openFileDialog1.Reset(); 
      if (!string.IsNullOrEmpty(ExcelFilePath)) 
      { 
       string fileName = Path.GetFileName(ExcelFilePath); 
       string fileExt = Path.GetExtension(ExcelFilePath); 
       //Avoid "you can't open this location using this program file" dialog 
       //if there is a file name in the path strip it) 
       if (!string.IsNullOrEmpty(fileName)) 
        initialDirectory = Path.GetDirectoryName(ExcelFilePath); 
     //if not let it be 
       else 
        initialDirectory = ExcelFilePath; 

      openFileDialog1.InitialDirectory = initialDirectory; 
      } 
      else 
       openFileDialog1.InitialDirectory = "c:\\"; 
      openFileDialog1.Filter = "Excel files (*.xls or *.xlsx)|*.xls;*.xlsx"; 
      //openFileDialog1.Filter = "xls files (*.xls)|*.xls|xlsx files(*.xlsx)|.xlsx"; 
      openFileDialog1.FilterIndex = 2; 
      openFileDialog1.RestoreDirectory = false; 
      openFileDialog1.CheckFileExists = true; 
      openFileDialog1.CheckPathExists = true; 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       var browseSelectionMade = BrowseSelectionMade; 
       if (browseSelectionMade!=null) 
        browseSelectionMade(this, new DataEventArgs<string>(openFileDialog1.FileName)); 
      } 
     } 

は、私はいつも最後に使用されたディレクトリを参照します。 OpenFileDialogによって最後に使用されたディレクトリはどこに保存されますか?そして、この動作を無効にする方法はありますか? (たとえば、初期のディレクトリが存在しない場合は常にC:\に設定したいと思います)OpenFileDialogデフォルトのパスに関係なく、私がtrueにRestoreDirectoryを設定しているか否かの

答えて

11

:ダイアログを開く前に、ちょうどチェック!

レジストリに保存されます。正確な場所はWindowsのバージョンによって異なりますが、Win7ではHKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ComDlg32です。 regeditを使って簡単に見て、になっていないとあなたに確信させるべきです。

簡単な回避策は、有効なパスを指定することです。計算したものが有効でない場合、Directory.Existsはfalseを返し、有効なものを提供します。 Environment.GetFolderPath()によって返されるDocumentsフォルダと同様です。そして最後に使用されたものでも間違ったことはありませんが、ユーザーは簡単にそれを認識して、それが望みのものに近いことを容易に認識します。

+0

両方のお返事ありがとうございます。私はあなたの回答を受け入れたものとしてマークしますが、2番目の回答も良いです。パスが正確にどこに格納されているかを最終的に回答したという事実は、私にとってプラスです。再度、感謝します! –

+0

Upvoting _Hans Passant_はとても無意味だと感じています... – itsho

1

ExcelFilePathが存在するかどうかを確認して、空か空かを確認します。ディレクトリが存在するかどうかを確認し、値が空の文字列にリセットされない場合は、ゴールデンでなければなりません。あなたはそれのすべてを解析されてきたら

は(はい、先ほどなど、ファイル名のロジックを適用する必要があります)しかし、それはディレクトリがそれはすべてあなたのように思える

if (!Directory.Exists(excelPath)) 
{ 
    ExcelFilePath = String.Empty; 
} 
24

を抜けるかどうかを判断するために些細です次のようにする必要があります。

string path; // this is the path that you are checking. 
if(Directory.Exists(path)) { 
    openFileDialog1.InitialDirectory = path; 
} else { 
    openFileDialog1.InitialDirectory = @"C:\"; 
} 

私は何かが欠けていない限りです。

+0

openFileDialog1.InitialDirectory = Directory.Exists(パス)?パス:@ "C:\"; –

3

私はそれのために何かが組み込まれているとは思わない。最後に使用されるディレクトリが保存されている

if (!Directory.Exists(initialDirectory)) 
{ 
    openFileDialog1.InitialDirectory = @"C:\"; 
} 
0

あなたには、いくつかの文字列に格納されたファイル名を使用している場合、それはファイル名をカットするパスを使用することをお勧めします(私のW10に私はちょうどファイル名を供給する場合は、オープンダイアログは、初期ディレクトリに開きません):

if (!System.IO.Directory.Exists(filename)) 
    { 
     openDlg.InitialDirectory = 
      System.IO.Path.GetDirectoryName(filename); 
    } 
0

将来のために私は

はやることを忘れないでください:

  try   
      { 
       result = dialog.ShowDialog(Window); 
      } 
      catch 
      { 
       dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
       result = dialog.ShowDialog(Window); 
      } 

これは、ユーザーが場所からファイルを開いたときに役立ちますが、それはもはや存在しません(例: USBスティック、マップされたネットワークドライブ) - InitialDirectoryが無効な場合、ShowDialogは例外をスローします。

関連する問題