代码之家  ›  专栏  ›  技术社区  ›  RRUZ

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

  •  18
  • RRUZ  · 技术社区  · 14 年前

    当使用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中而不是在 视窗7 ?

    2 回复  |  直到 11 年前
        1
  •  16
  •   JaredPar    14 年前

    根据您的描述,它听起来像是 RestoreDirectory xp和windows7之间的属性不同。我不知道为什么会这样,但您可以通过在代码中显式设置值来解决这个问题。将其设置为true将在对话框关闭时还原目录。

        2
  •  10
  •   StarBright    14 年前

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

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

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

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