为什么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)
我们在当前项目中发现的是,OpenFileDialog不再更改当前目录,使属性.RestoreDirectory过时.应用程序中的代码用于在我们打开文件时(在Windows XP中运行时)更改当前目录.它在Windows 7中不再那样做了.结果它打破了我们的应用程序,因为现在我们的数据集在我们尝试使用没有完整路径的文件名反序列化时不知道文件所在的目录.如果您打算迁移到Windows 7,请注意一点.
这是一种痛苦,虽然在某些方面你可能会预料到它...如果你多次进入一个开放的对话框(在应用程序中),你经常会发现它最后一次离开它.
如果它影响您的代码,您可以GetCurrentDirectory()在进入对话框之前拍摄快照,然后恢复它(因此您的代码看不到更改).您可能希望单独存储用户的工作目录(并交换它们),以便用户也能获得预期的行为.
当前工作目录可以在运行时更改,是的.
考虑使用
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
Run Code Online (Sandbox Code Playgroud)
要么
System.AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)
何时需要应用程序目录.