Вопрос: Начальный каталог для OpenFileDialog


Диалоговое окно файла должно открыть последнее местоположение каталога, которое использовалось до его закрытия, но я понятия не имею, как это сделать. Мой коллега только показывает мне пример слова, когда вы нажимаете «файл», он показывает последние использованные файлы, он сказал мне использовать регистр или INI-файл, который я никогда раньше не использовал.

Вот код, который я использую:

string f_sOudeLocatie = @"D:\path\is\classified";

private void btBrowse_Click(object sender, EventArgs e)
{
    OpenFileDialog fdlg = new OpenFileDialog();
    fdlg.Title = "Zoek de CSV file";
    fdlg.InitialDirectory = f_sOudeLocatie;
    fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
    fdlg.FilterIndex = 1;
    fdlg.RestoreDirectory = true;
    if (fdlg.ShowDialog() == DialogResult.OK)
    {
        tbGekozenBestand.Text = fdlg.FileName;
        tbVeranderNaamIn.Text = Path.GetDirectoryName(fdlg.FileName);
        f_sOudeLocatie = Path.GetDirectoryName(fdlg.FileName);
        f_sSourceFileName = fdlg.FileName;
        f_sDestFileName = Path.GetFileName(Path.GetDirectoryName(fdlg.FileName)) + ".csv";
        btOpslaan.Enabled = true;
        tbVeranderNaamIn.ReadOnly = false;
    }
}

4


источник


Ответы:


если вы создадите OpenFileDialog вне события нажатия кнопки он должен помнить последнюю папку, в которой вы были

string f_sOudeLocatie = @"D:\path\is\classified";
OpenFileDialog fdlg = new OpenFileDialog();

public Form1()
{
    InitializeComponent();
    fdlg.Title = "Zoek de CSV file";
    fdlg.InitialDirectory = f_sOudeLocatie;
    fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
    fdlg.FilterIndex = 1;
    fdlg.RestoreDirectory = true;
}
private void btBrowse_Click(object sender, EventArgs e)
{
    if (fdlg.ShowDialog() == DialogResult.OK)
    {
        fdlg.InitialDirectory = fdlg.FileName.Remove(fdlg.FileName.LastIndexOf("\\"));// THIS LINE IS IMPORTENT

        tbGekozenBestand.Text = fdlg.FileName;
        tbVeranderNaamIn.Text = Path.GetDirectoryName(fdlg.FileName);
        f_sOudeLocatie = Path.GetDirectoryName(fdlg.FileName);
        f_sSourceFileName = fdlg.FileName;
        f_sDestFileName = Path.GetFileName( Path.GetDirectoryName(fdlg.FileName) ) + ".csv";
        btOpslaan.Enabled = true;
        tbVeranderNaamIn.ReadOnly = false;
    }
}

9



Вам нужно установить

fdlg.RestoreDirectory = false;

Причина:

Свойство RestoreDirectory гарантирует, что значение в   Environment.CurrentDirectory будет сброшен перед OpenFileDialog   закрывается. Если для параметра RestoreDirectory установлено значение false , тогда   Environment.CurrentDirectory будет установлен в любой каталог   OpenFileDialog в последний раз открыт. Как объяснялось Вот


3



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

Эта статья проекта кода хорошо объясняет вам чтение и запись в реестр ReadWriteDeleteFromRegistry

Если вы решите использовать INI-файл, некоторый поиск даст вам примеры того, как читать и писать из INI-файла


1