WPF OpenFileDialog如何跟踪上次打开文件的目录?

时间:2012-06-21 18:46:50

标签: openfiledialog working-directory

我们知道WPF OpenFileDialog不再更改应用程序的工作目录,RestoreDirectory属性是“未实现”。但是,在后续打开时,其初始目录默认为最后打开的文件而不是原始工作目录,因此必须将此信息存储在某处。我想知道是否可以从用户代码中获取/设置它?

1 个答案:

答案 0 :(得分:5)

在Windows 7上,最近的文件信息通过以下密钥存储在注册表中:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Comdlg32\OpenSaveMRU

此键下方是各种文件扩展名的子键(例如exedocxpy等。

现在,如果您想要阅读这些值,这将获得存储在子项下方的所有路径的列表(改编自here):

String mru = @"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU";
RegistryKey rk = Registry.CurrentUser.OpenSubKey(mru);
List<string> filePaths = new List<string>();

foreach (string skName in rk.GetSubKeyNames())
{
    RegistryKey sk = rk.OpenSubKey(skName);
    object value = sk.GetValue("0");
    if (value == null)
        throw new NullReferenceException();

    byte[] data = (byte[])(value);

    IntPtr p = Marshal.AllocHGlobal(data.Length);
    Marshal.Copy(data, 0, p, data.Length);

    // get number of data;
    UInt32 cidl = (UInt32)Marshal.ReadInt16(p);

    // get parent folder
    UIntPtr parentpidl = (UIntPtr)((UInt32)p);

    StringBuilder path = new StringBuilder(256);

    SHGetPathFromIDListW(parentpidl, path);

    Marshal.Release(p);

    filePaths.Add(path.ToString());
}

参考文献: