18

在 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

4

2 回答 2

16

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

于 2010-06-10T22:28:10.843 回答
10

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

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

这是文件对话框实现中的一个错误,无论 RestoreDirectory 属性的值如何都会发生

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

于 2010-06-22T18:55:36.873 回答