为什么OpenFileDialog会改变我的工作目录?

15 .net openfiledialog

为什么OpenFileDialog会改变我的工作目录?我应该假设System.Windows.Forms中的许多func会改变我的工作目录吗?

    OpenFileDialog open = new OpenFileDialog();
    open.Filter = filter;
    a = Directory.GetCurrentDirectory(); //<-- correct
    if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop
    {
        a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop
Run Code Online (Sandbox Code Playgroud)

小智 19

或者你可以让它不那样做.请参见FileDialog.RestoreDirectory属性.


Fer*_*doZ 9

我们在当前项目中发现的是,OpenFileDialog不再更改当前目录,使属性.RestoreDirectory过时.应用程序中的代码用于在我们打开文件时(在Windows XP中运行时)更改当前目录.它在Windows 7中不再那样做了.结果它打破了我们的应用程序,因为现在我们的数据集在我们尝试使用没有完整路径的文件名反序列化时不知道文件所在的目录.如果您打算迁移到Windows 7,请注意一点.

  • 好主,我刚刚在这个疯狂的斗争中发现了这个评论大约3个小时,试图理解为什么我在XP和Windows 7上有不同的行为,因为一个怪异的文件对话框. (2认同)

Mar*_*ell 7

这是一种痛苦,虽然在某些方面你可能会预料到它...如果你多次进入一个开放的对话框(在应用程序中),你经常会发现它最后一次离开它.

如果它影响您的代码,您可以GetCurrentDirectory()在进入对话框之前拍摄快照,然后恢复它(因此您的代码看不到更改).您可能希望单独存储用户的工作目录(并交换它们),以便用户也能获得预期的行为.


tan*_*ius 6

当前工作目录可以在运行时更改,是的.

考虑使用

Directory.GetParent(Assembly.GetExecutingAssembly().Location)
Run Code Online (Sandbox Code Playgroud)

要么

System.AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)

何时需要应用程序目录.