使用OpenFileDialog会更改默认程序目录

时间:2021-11-24 15:22:29

这个问题可能只有在特定的程序中会发现:当我们在程序中使用相对路径时是依赖于当前目录的。所以在使用类似代码:

XElement rootNode = XElement.Load(@"zips/"+book.Id+"/"+src);

时程序会加载当前dll文件下的zips文件夹下的对应文件。而如果这个时候如果我们在窗体上使用了OpenFileDialog打开文件后,对应的默认文件夹就会做了相应的改变,使用同样的语句可能就会报错。见如下测试代码:

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
}

可能这是微软想提高用户体验而坐的一种设置,当用户使用了OpenFileDialog选择了某一个文件时在下次再次打开OpenFileDialog对话框后当前文件夹会默认为上次您选择文件的文件夹。这就是问题所在了。

两种方法解决这个问题:

1:让你的OpenFileDialog不更改目录

openDialog.RestoreDirectory = true

(Gets or sets a value indicating whether the dialog box restores the current directory before closing.)http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory.aspx

2:不使用相对路径而是用完整路径:

System.AppDomain.CurrentDomain.BaseDirectory+…