C# %temp%位置的OpenFileDialog.RestoreDirectory失败?缺陷或特征

C# %temp%位置的OpenFileDialog.RestoreDirectory失败?缺陷或特征,c#,.net,C#,.net,在我的应用程序中,我使用OpenFileDialog从临时位置%temp%选择了一个文件。现在,当我再次使用OpenFileDialog时,它会从其他位置打开。如果选择了除temp以外的任何文件夹,此功能工作正常 这是一个bug还是一个功能或技术限制 我写了这段代码 public string[] OnOpenFile(string filetype) { string strReturn = null; string[] strFilename = null; Syst

在我的应用程序中,我使用OpenFileDialog从临时位置%temp%选择了一个文件。现在,当我再次使用OpenFileDialog时,它会从其他位置打开。如果选择了除temp以外的任何文件夹,此功能工作正常

这是一个bug还是一个功能或技术限制

我写了这段代码

public string[] OnOpenFile(string filetype)
{
    string strReturn = null;
    string[] strFilename = null;
    System.Windows.Forms.OpenFileDialog fdlg = new System.Windows.Forms.OpenFileDialog();
    fdlg.Title = "Select an Excel file to Upload.";
    fdlg.Filter = filetype;
    fdlg.RestoreDirectory = true;
    if (fdlg.ShowDialog() == DialogResult.OK) 
    {
        strFilename = fdlg.FileNames;
    }
    return strFilename;
}
您可以使用在中记录的InitialDirectory属性

在您的示例中:

fdlg.InitialDirectory = Path.GetTempPath();
在LinqPad中运行此C程序会产生所需的结果

void Main()
{
OnOpenFile();
OnOpenFile();
OnOpenFile();
}
    public string[] OnOpenFile()
{
    string strReturn = null;
    string[] strFilename = null;
    System.Windows.Forms.OpenFileDialog fdlg = new System.Windows.Forms.OpenFileDialog();
    fdlg.Title = "Select an Excel file to Upload.";
    //fdlg.Filter = filetype;
    fdlg.InitialDirectory = Path.GetTempPath();
    fdlg.RestoreDirectory = true;
    if (fdlg.ShowDialog() == DialogResult.OK) 
    {
        strFilename = fdlg.FileNames;
    }
    return strFilename;
}
如果你评论

fdlg.InitialDirectory = Path.GetTempPath();
你可以达到想要的行为

每次在文件夹中选择文件时,OpenFileDialog中的文件夹都会打开。
如果按“取消”,您必须以不同的方式处理所选路径-在某些字符串变量中,然后当您再次打开OpenFileDialog时,设置InitialDirectory

,然后将所选目录保存到temp.,然后再次使用InitialDirectory重设它。GetTempPath也无法处理InitialDirectory。这无疑是一项功能。这不是问题,您的用户永远不会这样做。不要强迫他这么做。@HansPassant:你的用户永远不会这么做。不要强迫他这么做。。。。他不会做什么,我应该强迫他做什么。