【问题标题】:Getting the last opened file in fileopen dialog box在 fileopen 对话框中获取最后打开的文件
【发布时间】:2011-04-19 09:30:34
【问题描述】:

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

【问题讨论】:

  • 我已经尝试过 InitialDirectory 属性。但是没有用。我还需要最后打开的文件名...可以使用哪个属性?

标签: c#


【解决方案1】:

这似乎有点奇怪,但在 Windows 7 下它可以与以下内容一起使用:

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

试试看,如果您需要进一步的帮助,请告诉我。

【讨论】:

  • 我正在尝试获取未设置的值。我需要获取上次打开的文件名。
【解决方案2】:

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

【讨论】:

  • 但我有一个奇怪的行为,在用 VB .net 开发的应用程序中,即使应用程序关闭,文本框中的值也会保留,但不是在 C# 中开发的;在 C# 中运行
  • OpenFileDialog 不记得最后一个文件名 - 只记得最后一个目录。
【解决方案3】:

这里提到:What does the FileDialog.RestoreDirectory Property actually do?

他们使用来自Environment.CurrentDirectory的路径。

【讨论】:

    【解决方案4】:

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

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

    稍后在应用程序中,我调用 SaveFileDialog,并将代码中的初始目录属性 (.InitialDirectory) 设置为默认目录。当我随后调用 OpenFileDialog 时,它默认为 SaveFileDialog 使用的目录。 “Environment.CurrentDirectory”的值一直没有改变。

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

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

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

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

    感谢您的帮助!

    谢谢, 布赖恩。

    【讨论】:

    • 这正是我想要的 :) 关于将细节保存到配置文件的想法,我也教过同样的内容......
    • 我现在有一个解决方案。我在 My.Settings 对象中创建了一个名为 CurrentDirectory 的属性。然后,我在每次调用文件对话框时将其显式设置为用户选择的目录(我必须从选择的文件名中提取它)。我还使用文件对话框的 .InitialDirectory 方法将目录设置为 My.Settings.CurrentDirectory。在应用程序关闭后这种情况仍然存在,从而解决了我的问题。布赖恩。
    • 如果您有问题,您应该创建另一个主题,而不是在答案中提出。
    【解决方案5】:

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

    • 最近使用的文件夹:最近使用的文件夹通常位于 C:\Documents and Settings[Your Profile]\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;
        }
    

    成功! 约旦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多