打开文件对话框路径问题

3

我有一个 OpenFileDialog,当用户第一次使用应用程序时,点击“浏览”应该打开特定路径,例如 %ProgramData%。对于后续的所有操作,它都应该打开上次使用的文件夹。

我尝试过:

        OpenFileDialog ofd = new OpenFileDialog();
        ofd.InitialDirectory = "C:\ProgramData";
        ofd.RestoreDirectory = true;
        ofd.FileName = "";
        DialogResult dr = ofd.ShowDialog();

问题在于,每次打开文件对话框后,它都会默认打开“C:\ProgramData”目录,即使我在查找所需文件时更改了路径。 是否需要设置特定属性或者根据对 OpenFileDialog 的使用情况编程来相应地设置路径?


你所说的“第一次”是指什么?是指应用程序加载后的第一次,还是用户使用应用程序的第一次? - ZafarYousafi
这是用户第一次使用该应用程序。抱歉没有表达清楚。 - dushyantp
2
每次它打开“C:\ProgramData”,因为你使用了InitialDirectory。 - eMi
4个回答

2

做类似这样的事情:

// save your current directory  
string currentDirectory = Environment.CurrentDirectory;  

// create an OpenFileDialog and set RestoreCurrentDirectory to false.   
OpenFileDialog ofd = new OpenFileDialog();  
ofd.RestoreCurrentDirectory = false;  
ofd.ShowDialog();  

// save the selected directory locally.   
string selectedDirectory = Environment.CurrentDirectory;  // OpenFileDialog changed this value.   
Environment.CurrentDirectory = currentDirectory; // reset the property with the first value.   

// next time you open an OpenFileDialog, set the InitialDirectory property  
OpenFileDialog ofd2 = new OpenFileDialog();  
ofd.InitialDirectory = selectedDirectory; // set the InitialDirectory to what it was last time an OpenFileDialog was opened.   
ofd.ShowDialog(); 

RestoreDirectory属性确保在OpenFileDialog关闭之前,Environment.CurrentDirectory的值将被重置。如果将RestoreDirectory设置为false,则Environment.CurrentDirectory将被设置为OpenFileDialog上次打开的目录。


可能它会起作用,我选择用Vinod的想法实现(查看所选答案)。我不得不对现有的代码进行简单的更改。感谢您的时间,它很有帮助。 - dushyantp
我刚在Win7 64和VS 2010上进行了一些测试,据我所知,OpenFileDialog对Environment.CurrentDirectory根本没有任何影响。 - Tom Bushell

2
尝试这个:
在按钮点击时,您正在将intialdirectory重置为C:\ ProgramData。
public partial class Form1 : Form
    {
           OpenFileDialog ofd = new OpenFileDialog();

        public Form1()
        {
            InitializeComponent();
            ofd.InitialDirectory = "C:\\ProgramData";
        }    
        private void button1_Click(object sender, EventArgs e)
        {                     
          DialogResult dr = ofd.ShowDialog();
          ofd.InitialDirectory = null;   
        }    
    }

你找到了问题所在,我每次都在重置初始目录。我稍微修改了你的代码,最终它对我起作用了。谢谢。 - dushyantp

1

-1

简单来说,

FileDialog.RestoreDirectory 属性设置为 true。当重新打开文件对话框时,它会定位到上次使用的目录。

示例:

ofd . RestoreDirectory = true;

无法工作,因为OpenFileDialog.RestoreDirectory未实现。 - ZafarYousafi
当您将鼠标悬停在属性上时,这就是 Visual Studio 给您的提示。不知道它为什么会这样说,但似乎是正确的,因为即使更改属性值,我也没有看到任何变化。 - ZafarYousafi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接