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

时间:2009-05-30 22:56:36

标签: .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

5 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:9)

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:6)

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

考虑使用

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

System.AppDomain.CurrentDomain.BaseDirectory

当您需要应用程序目录时。

答案 4 :(得分:0)

为什么在XP中​​,filedialog改变当前目录,问问MS会更好。无论如何,XP中的打开文件对话框有这种奇怪的行为,但在w7或更高版本中没有。 因此,您可以在保存从SaveFileDialog中选择的路径后设置当前目录,以便更改当前目录。

我发布了我的方法,你可以看到选择的路径被保存到设置并重置当前目录

 private void ShowSaveFileDialog(object sender, RoutedEventArgs e)
    {    
        private const int xpVerMajorNumber = 5;        
        var saveFileDialog = new SaveFileDialog()
        {                
            FileName = Settings.Default.ExcelFileName,
            DefaultExt = "*.xlsx",
            Filter = "Excel Workbook (.xlsx)|*.xlsx"
        };

        if (saveFileDialog.ShowDialog(this) == true)
            Settings.Default.ExcelFileName = saveFileDialog.FileName;


         if (Environment.OSVersion.Version.Major <= xpVerMajorNumber)
        {
       Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
        }

    }