在fileopen对话框中获取最后打开的文件

时间:2011-04-19 09:30:34

标签: c#

在我调用它们时,在FileOpen或FileSave对话框中,它们会自动转到上一个打开的路径。即使我关闭我的应用程序并打开它也会发生这种情况。但是如何将该路径/文件名称转换为文本框或变量?

5 个答案:

答案 0 :(得分:3)

看起来有点奇怪但是在Windows 7下它可以使用以下内容:

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);

试试并告诉我你是否需要进一步的帮助。

答案 1 :(得分:2)

据推测,信息存储在注册表深处的某个地方(由OpenFileDialog只是包装器的非托管控件完成)。最简单的可能是在您的应用程序中最后一次关闭对话框时可以访问它的路径。

答案 2 :(得分:1)

如上所述:What does the FileDialog.RestoreDirectory Property actually do?

他们使用Environment.CurrentDirectory的路径。

答案 3 :(得分:1)

我和Vicky有类似的问题,如下所示。我正在使用Vista Business SP2下的Visual Basic 2008 Express Edition进行开发。

我有一个带有OpenFileDialog和SaveFileDialog的应用程序。当我在第一次运行应用程序时调用OpenFileDialog时,它默认为Application上次打开/保存文件的目录。但是,此目录不是“Environment.CurrentDirectory”,它设置为“C:\ Users \ Brian \ Documents \ Visual Studio 2008 \ Projects \ IFPM Analysis \ IFPM Analysis \ bin \ Debug”,并且不会被OpenFileDialog或SaveFileDialog。

稍后在Application中,我调用SaveFileDialog,将代码中设置的初始目录属性(.InitialDirectory)设置为默认目录。当我随后调用OpenFileDialog时,它默认为SaveFileDialog使用的目录。 “Environment.CurrentDirectory”的值始终保持不变。

所以,我的问题是,存储OpenFileDialog和SaveFileDialog所使用的目录在哪里?我假设它与底层的FileDialog类有关,我知道即使在关闭并重新启动应用程序之后它仍然存在。

理想情况下,我希望能够存储用户从OpenFileDialog中选择的目录,并在使用SaveFileDialog后重置它。虽然我可以在Application中使用OpenFileDialog的InitialDirectory属性,但是当我关闭Application并重新启动它时,这对我没有帮助。遗憾的是,典型的用户操作是:

  • 启动应用程序
  • 使用OpenFileDialog打开文件
  • 使用SaveFileDialog保存文件
  • 离开申请

这意味着当用户返回应用程序时,默认目录是“错误”目录。我知道我可以在我自己的配置文件中保存OpenFileDialog中最后使用的目录,这样它就会在Application之外保留,但是当Windows为我提供相同的功能时,这似乎有点傻,如果我知道在哪里看的话!

感激不尽的任何帮助!

谢谢, 布赖恩。

答案 4 :(得分:1)

最近打开的文件列表存储在两个地方:

  • 最近的文件夹:最近的文件夹通常位于C:\ Documents and Settings [您的个人资料] \ Recent(Windows Vista下的路径不同),它包含最近打开的快捷方式文件。
  • 注册表:每次在保存/打开对话框中选择文件时,文件名都会添加到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU
  • 下的文件列表中

此方法可以帮助您获取列表:

public static string GetLastOpenSaveFile(string extention)
    {
        RegistryKey regKey = Registry.CurrentUser;
        string lastUsedFolder = string.Empty;
        regKey = regKey.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU");

        if (string.IsNullOrEmpty(extention))
            extention = "html";

        RegistryKey myKey = regKey.OpenSubKey(extention);

        if (myKey == null && regKey.GetSubKeyNames().Length > 0)
            myKey = regKey.OpenSubKey(regKey.GetSubKeyNames()[regKey.GetSubKeyNames().Length - 2]);

        if (myKey != null)
        {
            string[] names = myKey.GetValueNames();
            if (names != null && names.Length > 0)
            {
                lastUsedFolder = (string)myKey.GetValue(names[names.Length - 2]);
            }
        }

        return lastUsedFolder;
    }

成功! 约尔丹