2012-04-02 15 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)); 
      } 
     } 

Indipendentemente dall'impostazione di RestoreDirectory su true, passerò sempre alla directory LAST used se la directory iniziale è impostata su un percorso che non esiste. Dov'è l'ultima directory utilizzata salvata da OpenFileDialog? E c'è un modo per ignorare questo comportamento? (ad esempio, desidero sempre impostarlo su C: \ se la directory iniziale non esiste?)OpenFileDialog percorso predefinito

risposta

11

casi in cui è l'ultima directory utilizzata salvato?

Viene memorizzato nel registro. La posizione esatta dipende dalla versione di Windows, per Win7 è HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ComDlg32. Una rapida occhiata con regedit dovrebbe convincerti che tu non vuoi fare lo .

La soluzione semplice consiste nel fornire un percorso valido. Se quello che si calcola non è valido, Directory.Exists restituisce false, quindi fornisce una valida. Come la cartella Documenti restituita da Environment.GetFolderPath(). Quindi, ancora una volta, non c'è niente di sbagliato nell'ultimo usato, l'utente lo riconoscerà facilmente con buone probabilità che sia vicino a quello desiderato.

+0

Grazie per entrambe le vostre risposte, contrassegnerò la vostra risposta come accettata, sebbene anche la seconda risposta sia buona. Il fatto che FINALMENTE io abbia una risposta a DOVE ESATTO il percorso è memorizzato, è il vantaggio per me. Grazie ancora! –

+0

Upvoting _Hans Passant_ sembra così inutile ... – itsho

1

Verificare se ExcelFilePath esiste, verificare se è vuoto o vuoto, tuttavia se prima del blocco si controlla per vedere se la directory esiste, e se non resetta il valore su una stringa vuota, dovresti essere d'oro.

(sì, è necessario applicare la logica nome del file, ecc in precedenza) ma una volta che hai analizzato tutto questo fuori, è banale per determinare se la directory esce

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

Sembra che tutto quello che la cosa da fare è la seguente:

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

Questo a meno che mi manchi qualcosa.

+0

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

3

Non penso ci sia qualcosa di costruito per quello. Basta controllare prima di aprire la finestra di dialogo:

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

Nel caso in cui si sta utilizzando il nome del file memorizzato in una stringa, è meglio utilizzare il percorso per tagliare il nome del file (sul mio W10 della finestra aperta non si apre nella directory iniziale, se fornisco solo il nome del file):

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

per il futuro mi

ricordo a che fare:

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

Questo aiuta nella situazione in cui l'utente ha aperto il file dalla posizione, che non esiste più (es. Chiavetta USB, unità di rete mappata) - ShowDialog genera un'eccezione se InitialDirectory non è valida.

Problemi correlati