在Windows XP中使用“打开文件”对话框时,为什么当前工作目录会更改?

时间:2010-06-10 22:22:13

标签: c# .net openfiledialog

我在c#中使用打开的文件对话框时发现了一个奇怪的行为。

如果在Windows XP中使用此代码,则当前工作目录将更改为所选文件的路径,但是如果在Windows 7中运行此代码,则当前工作目录不会更改。

    private void button1_Click(object sender, EventArgs e)
    {            
        MessageBox.Show(string.Format("Current Directory {0}",Directory.GetCurrentDirectory()), "My Application",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog and get result.
        if (result == DialogResult.OK) 
        {

        }
        MessageBox.Show(string.Format("Current Directory {0}", Directory.GetCurrentDirectory()), "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }

有人知道这种行为的原因吗?为什么当前目录在XP中而不在Windows 7

中更改

2 个答案:

答案 0 :(得分:16)

根据您的描述,听起来像RestoreDirectory属性的默认值在XP和Windows7之间是不同的。我不确定为什么会这样,但您可以通过在代码中显式设置值来解决此问题。将其设置为true将恢复对话框关闭时的目录。

答案 1 :(得分:10)

FileDialog(OpenFileDialog的基类)具有一个名为AutoUpgradeEnabled的属性,该属性控制对话框是否利用了Vista和较新操作系统中可用的较新文件对话框。 (在内部,这是在comdlg32中调用GetOpenFileName或使用IFileDialog接口之间的区别。)

这样做的原因是较新的对话框支持许多功能,如“places”栏(请参阅CustomPlaces集合)。这种意外的副作用是较新的IFileDialog实现不会更改当前目录,而旧版本则会更改。

这是文件对话框实现中的错误,无论RestoreDirectory属性的值是什么

都会发生

如果您不想使用较新的文件对话框功能,最简单的方法是将AutoUpgradeEnabled设置为false。