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

时间:2012-08-20 14:18:10

标签: 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.
            }

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

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

5 个答案:

答案 0 :(得分:10)

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

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();
}

答案 1 :(得分:3)

您可以在两个地方找到用户访问的最后一个文件夹:

  1. Recent Files and Folders:可在此处找到:C:\Documents and Settings\USER\Recent
  2. Registry:在注册表中查看:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU
  3. 您可以使用此代码段找到它:

    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;
    }
    

    OR

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

    通过这种方式,当您重新打开FileDialog时,它将在与以前相同的目录中打开。

    通过设置FileDialog.RestoreDirectory = true,当您关闭FileDialog时,将恢复原始工作目录。

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

答案 2 :(得分:1)

应用程序设置可以解决问题。
A more elaborated version is here

  

使用类型字符串的设置

     

为每个按钮创建一个设置并将Path存储在那里。然后用   设置为ofd.InitialPath

     

使用上面的代码示例,试试这个:

     

在解决方案资源管理器中右键单击您的应用名称,然后单击“设置”   tab Name = Button1Path Type = String Scope = User

     

然后使用它:

private void btnBrowse_Click(object sender, EventArgs e)
        {
                fbFolderBrowser.InitialDirectory=this.Settings.Button1Path;
            if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
            {
                // I want to open the last folder selected by the user here.
                this.Settings.Button1Path=fbFolderBrowser.SelectedPath
            }

答案 3 :(得分:0)

您可以轻松跟踪上次选择的文件夹,如下所示:

public String LastSelectedFolder;

private void btnBrowse_Click(object sender, EventArgs e)
{
    fbFolderBrowser.InitialDirectory=this.Settings.Button1Path;
    if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
    {
        // Save Last selected folder.
        LastSelectedFolder = fbFolderBrowser.SelectedPath;
    }
}

答案 4 :(得分:-1)

我知道这是一个非常古老的主题,但没有一个答案指向在用户的最后位置重新打开文件浏览器的最简单方法。

只需定义RestoreDirectory = true即可。 检查示例

var fd = new OpenFileDialog
   {
       Filter = @"All Files|*.*",
       RestoreDirectory = true,
       CheckFileExists = true
   };

Class OpenFileDialog api reference

https://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory(v=vs.110).aspx

除非我误解了这篇文章的意图,否则这是迄今为止实现它的最简单方法。但是,如果您确实需要打印最后一个位置,请检查另一个