Solved

How to retrieve the most recently used directory

Posted on 2004-08-04
11
402 Views
Last Modified: 2012-05-05
When I use OpenFileDialog, and do not set the InitialDirectory, the dialog defaults to the directory previously selected by the user.  This works even when the app is closed and re-started.

How can I retrieve that most recently opened directory, so I can use it in a FolderBrowserDialog()?

I looked through Environment and Application namespaces, but every path I see points to a fixed directory somewhere, not to the most recent directory selected by the user.
0
Comment
Question by:rschaaf
11 Comments
 
LVL 37

Accepted Solution

by:
gregoryyoung earned 250 total points
ID: 11719872
OpenFileDialog stores the last used folder in the registry.
0
 

Author Comment

by:rschaaf
ID: 11719979
Where in the registry?
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11720051
im not sure but I am quite sure you shouldnt be doing that :)
0
Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
LVL 4

Expert Comment

by:NTAC
ID: 11720266
You can save it in a file, and read that file each time you start--like a *.ini for your brogram.
0
 

Author Comment

by:rschaaf
ID: 11721848
What I want is access to THAT path, the one used by the OpenFileDialog().  There must be some way to do it...
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11721856
he is suggesting that you duplicate the logic ... when they save, save the folder they saved on your own in the registry.
0
 

Author Comment

by:rschaaf
ID: 11723114
Okay - let me state my problem again.

I do not want to use OpenFileDialog.  I want to use FolderBrowserDialog() because I need the user to pick a directory, not a file.  But I want FolderBrowserDialog to default the the previously used directory, just like OpenFileDialog does when you set OpenFileDialog.InitialDirectory = null.

How can I discover what initial directory OpenFileDialog defaults to, without actually calling it?

I am increasing the points to 250.
0
 

Author Comment

by:rschaaf
ID: 11723175
I think I found it.

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*

Look at MRUList key.  Take the first character. Look at the key with that letter.

Does anyone have a better way? I'm not sure that the '*' key name in the registry means...
0
 

Author Comment

by:rschaaf
ID: 11723249
This seems to be working, at least under XP/2000

RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*");
string MRUList = rk.GetValue("MRUList").ToString();
string MostRecent = MRUList[0].ToString();
string MRU = rk.GetValue(MostRecent).ToString();
string MRUPath = Path.GetDirectoryName(MRU);

MRUPath now contains the folder most recently used in the OpenFileDialog().
0
 
LVL 9

Expert Comment

by:s_sansanwal
ID: 11723265
Its not working on my computer.
Microsoft don't save this information in the registry and that why FolderBrowserDialog loses selectedpath after application is closed. FolderBrowserDialog selects same value until the object is not destroyed i.e it stores value on the stack.
To implement your functionality, you need to save selectedpath to registry yourself after ShowDialog(); and read it from registry at startup of application. Assign this value to selectedpath property of FolderBrowserDialog

Cheers,
S Sansanwal
0
 

Author Comment

by:rschaaf
ID: 11727419
I'm going to award the points to greoryyoung who pointed me to the registry.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question