2013-04-18 3 views
6

Как сделать мой магазин приложений последним путем, открытым в openFileDialog, и после нового открытия восстановить его?Как сохранить последнюю папку в openFileDialog?

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    acc_path = openFileDialog1.FileName; 
    Settings.Default.acc_path = acc_path; 

    foreach (string s in File.ReadAllLines(openFileDialog1.FileName)) 
    { 
     accs.Enqueue(s); 
    } 
    label2.Text = accs.Count.ToString(); 
} 

ответ

4

Я думаю, что было бы достаточно для того, чтобы использовать SetCurrentDirectory для STE текущего каталога для операционной системы. Таким образом, в следующем диалоговом открытии он будет выбирать этот путь.

Или просто сохраните путь в какой-либо переменной вашего приложения и используйте
FileDialog.InitialDirectory Недвижимость.

1

Вы можете использовать InitialDirectory свойство: http://msdn.microsoft.com/fr-fr/library/system.windows.forms.filedialog.initialdirectory.aspx

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
openFileDialog1.InitialDirectory = previousPath; 
if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    previousPath = Path.GetDirectoryName(openFileDialog1.FileName); 
    acc_path = openFileDialog1.FileName; 
    Settings.Default.acc_path = acc_path; 

    foreach (string s in File.ReadAllLines(openFileDialog1.FileName)) 
    { 
     accs.Enqueue(s); 
    } 
    label2.Text = accs.Count.ToString(); 
} 
7

После изменения настроек вы должны вызвать

Settings.Default.Save(); 

и, прежде чем открыть OpenFileDialog установить

openFileDialog1.InitialDirectory = Settings.Default.acc_path; 
+1

Мне лично нравится этот подход, так как я не использую один и тот же экземпляр выбора файла для нескольких форм. – Joel

1

Ниже вы можете убедиться, что OpenFileDialog откроется в каталоге, который был выбран последним в течение всего срока службы приложения.

OpenFileDialog OpenFile = new OpenFileDialog(); 
OpenFile.RestoreDirectory = false; 
+1

, а также не задавать свойство InitialDirectory. –

+0

... но я думаю, что вы имеете в виду: OpenFile.RestoreDirectory = true; – Viking

0

Я считаю, что все, что вам нужно сделать, это НЕ установить начальную директорию, и диалоговое окно запоминает ваше последнее сохранение/открытое местоположение. Это помнит даже после закрытия приложения и его повторного открытия. Попробуйте этот код с начальным каталогом. Многие из приведенных выше предложений также будут работать, но если вы не ищете дополнительную функциональность, это все, что вам нужно сделать.

private void button1_Click(object sender, EventArgs e) 
    { 
     Stream myStream = null; 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

     //openFileDialog1.InitialDirectory = "c:\\"; 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
     openFileDialog1.FilterIndex = 2; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        using (myStream) 
        { 
         // Insert code to read the stream here. 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 
    } 
0

, если вы используете

Dim myFileDlog As New OpenFileDialog() 

, то вы можете использовать это, чтобы восстановить последний каталог

myFileDlog.RestoreDirectory = True 

и это не

myFileDlog.RestoreDirectory = False 
0

Я знаю, что это бит старого потока, но я не смог найти его как Мне понравился этот же вопрос, поэтому я разработал свой собственный. Я сделал это в WPF, но он должен работать почти так же в Winforms.

По сути, я использую файл для хранения моих последних программ.

Когда моя программа запускается, я читаю конфигурационный файл и сохраняю его в глобальной переменной. Ниже приведен класс и функция, которые я вызываю, когда запускается моя программа.

public static class Statics 
{ 
    public static string CurrentBrowsePath { get; set; } 

    public static void initialization() 
    { 
     ConfigurationManager.RefreshSection("appSettings"); 
     Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

     CurrentBrowsePath = ConfigurationManager.AppSettings["lastfolder"]; 
    } 
} 

Далее у меня есть кнопка, которая открывает диалоговое окно просмотра файлов и устанавливает InitialDirectory свойство к тому, что было сохранено в файле конфигурации. Надеюсь, это поможет любому поисковому роботу.

private void browse_Click(object sender, RoutedEventArgs e) 
    { 
     OpenFileDialog open_files_dialog = new OpenFileDialog(); 
     open_files_dialog.Multiselect = true; 
     open_files_dialog.Filter = "Image files|*.jpg;*.jpeg;*.png"; 
     open_files_dialog.InitialDirectory = Statics.CurrentBrowsePath; 

     try 
     { 
      bool? dialog_result = open_files_dialog.ShowDialog(); 

      if (dialog_result.HasValue && dialog_result.Value) 
      { 
       string[] Selected_Files = open_files_dialog.FileNames; 

       if (Selected_Files.Length > 0) 
       { 
        ConfigWriter.Update("lastfolder", System.IO.Path.GetDirectoryName(Selected_Files[0])); 
       } 

       // Place code here to do what you want to do with the selected files. 
      } 
     } 
     catch (Exception Ex) 
     { 
      MessageBox.Show("File Browse Error: " + Environment.NewLine + Convert.ToString(Ex)); 
     } 
    } 
Смежные вопросы