Как сохранить последнюю папку в 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();
}
8 ответов
после изменения настроек, вы должны назвать
Settings.Default.Save();
и прежде чем открыть OpenFileDialog вы установите
openFileDialog1.InitialDirectory = Settings.Default.acc_path;
Я думаю, что вам будет достаточно использовать SetCurrentDirectory для ste текущего каталога для ОС. Поэтому при следующем открытии диалога он выберет этот путь.
или просто сохранить путь в переменной приложения и использовать
классов filedialog.InitialDirectory собственность.
все, что вам нужно, чтобы убедиться, что OpenFileDialog откроется в каталоге, который пользователь выбрал последним, в течение всего срока службы вашего приложения.
OpenFileDialog OpenFile = new OpenFileDialog();
OpenFile.RestoreDirectory = false;
можно использовать свойство 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();
}
Я считаю, что все, что вам нужно сделать, это не установить начальный каталог, и диалоговое окно запоминает ваше последнее сохранение/открытие. Это запоминается даже после закрытия и повторного открытия приложения. Попробуйте этот код с начальным каталогом, закомментированным. Многие из вышеперечисленных предложений также будут работать, но если вы не ищете дополнительную функциональность, это все, что вам нужно сделать.
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);
}
}
}
Я знаю, что это немного старая нить, но я не смог найти решение, которое мне понравилось в этом же вопросе, поэтому я разработал свой собственный. Я сделал это в WPF, но он должен работать почти так же в Winforms.
по существу, я использую app.config
файл для хранения моих программ последний путь.
когда моя программа запускается, я читаю конфигурационный файл и сохраняю его в глобальной переменной. Ниже приведен класс и функция, которые я вызываю при запуске моей программы.
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
свойство того, что было сохранено в файле config. Надеюсь, это поможет любому гуглить.
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));
}
}
Если вы используете
Dim myFileDlog As New OpenFileDialog()
тогда вы можете использовать это для восстановления последнего каталога
myFileDlog.RestoreDirectory = True
и не
myFileDlog.RestoreDirectory = False
(in VB.NET)