OpenFileDialog - 如何防止默认目录被覆盖?

时间:2017-08-14 17:13:31

标签: c# openfiledialog

我试图在关闭OpenFileDialog后找到重置初始/默认目录的方法。请考虑以下示例:

using (OpenFileDialog openFile = new OpenFileDialog())
{
    // Example: This opens in the 'Desktop' directory
    // User navigates to 'Documents' directory in the Form before selecting a file
    DialogResult result = openFile.ShowDialog();
    if (result == DialogResult.OK) MessageBox.Show(openFile.FileName);
}

// Somewhere else, this code then runs
using (OpenFileDialog openFile = new OpenFileDialog())
{
    // Problem: This now opens in 'Documents' directory. Not good!
    // How to open using the same default directory (ie: Desktop)?
    DialogResult result = openFile.ShowDialog();
    if (result == DialogResult.OK) MessageBox.Show(openFile.FileName);
}

要清楚,'桌面'只是一个例子,我实际上并不知道初始目录,因为它存储在注册表中(如果我理解正确的话)。

我尝试使用RestoreDirectory选项。这似乎没有任何影响。从我在其他地方读到的内容来看,它应该将Environment.CurrentDirectory重置为原始值,这听起来很合理。但是,我不认为OpenFileDialog甚至使用Environment.CurrentDirectory,因为该值永远不会更改,并且永远不会与OpenFileDialog打开的内容相匹配(除非我手动浏览到它)。

这里有什么我可能会遗失的吗?有谁知道如何停止覆盖 OpenFileDialog使用的目录变量作为默认值?

1 个答案:

答案 0 :(得分:0)

默认目录存储在Windows 7上的以下注册表项中。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32

IIRC,这在其他操作系统上可能有所不同,因此您可能希望根据您的操作系统版本找出确切的目录。

因此,您可以做的是在应用程序启动时获取该值,并将其保存在内存中,并在每次打开对话框之前将其设置为OpenFileDialog.InitialDirectory