如何跟踪用户选择的最后一个文件夹?

RJ.*_*RJ. 7 c# directory

我认为使用应用程序设置可以做到这一点,但我没有让它工作.这就是我所拥有的:

private void btnBrowse_Click(object sender, EventArgs e)
        {
            if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
            {
                // I want to open the last folder selected by the user here.
            }
Run Code Online (Sandbox Code Playgroud)

当用户点击此按钮时,我想打开浏览窗口到他访问的最后一个文件夹并保存.下次他点击按钮时,它会自动选择该文件夹.

我想也许我可以使用用户变量,我可以在运行时更改,但我没有让它工作.任何人都可以帮我一把吗?

Kas*_*han 13

转到您已创建的项目的设置页面,项目设计器,并在应用程序内添加文件夹路径变量.现在添加以下代码以恢复上次选择的文件夹路径.

FolderBrowserDialog folderBrowser = new FolderBrowserDialog();
folderBrowser.Description = "Select a folder to extract to:";
folderBrowser.ShowNewFolderButton = true;
folderBrowser.SelectedPath = Properties.Settings.Default.Folder_Path;
//folderBrowser.SelectedPath = project_name.Properties.Settings.Default.Folder_Path;

if (folderBrowser.ShowDialog() == DialogResult.OK)
{

    if (!String.IsNullOrEmpty(Properties.Settings.Default.Folder_Path))
        Properties.Settings.Default.Folder_Path = folderBrowser.SelectedPath;

    Properties.Settings.Default.Folder_Path = folderBrowser.SelectedPath;
    Properties.Settings.Default.Save();
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么会这样:if(!String.IsNullOrEmpty(Properties.Settings.Default.Folder_Path)) (3认同)

Nex*_*eer 4

您可以在两个位置找到用户最后访问的文件夹:

  1. Recent Files and Folders: 在这里能找到它:C:\Documents and Settings\USER\Recent
  2. Registry:在注册表中查看这里: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;
}
Run Code Online (Sandbox Code Playgroud)

或者

在 Windows XP 中,当您在SaveFileDialog保存文件的目录上按“保存”时,该目录将被设置为新的当前工作目录(图中的目录Environment.CurrentDirectory)。

这样,当您重新打开 时FileDialog,它会在与之前相同的目录中打开。

通过设置FileDialog.RestoreDirectory = true,关闭时FileDialog会恢复原来的工作目录。

在 Windows Vista/7 中,行为始终为FileDialog.RestoreDirectory = true.