如何将OpenFileDIalog上的初始目录设置为C#中的users`Download`文件夹

JMK*_*JMK 6 c# openfiledialog

好的,我有一个OpenFileDialog,我想将初始目录设置为用户的'Download'文件夹.这是一个内部应用程序,因此,我确信用户将使用Windows 7.

var ofd = new OpenFileDialog();

//This doesn't work
ofd.InitialDirectory =
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Downloads");

//This doesn't work either
ofd.InitialDirectory = @"%USERPROFILE%\Downloads";

ofd.Filter = "Zip Files|*.zip";

ofd.ShowDialog();

txtFooBar.Text = ofd.FileName;
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经尝试了上述内容,但都没有工作 没有抛出异常,它只是没有将初始目录设置为downloads文件夹.

我哪里错了?

谢谢

Rob*_*bar 5

也许这会有所帮助:https : //stackoverflow.com/a/1175250/333404

更新

为我工作:https : //stackoverflow.com/a/3795159/333404

  private void Button_Click_1(object sender, RoutedEventArgs e) {
            var ofd = new OpenFileDialog();
            ofd.InitialDirectory = GetDownloadsPath();
            ofd.Filter = "Zip Files|*.zip";
            ofd.ShowDialog();
        }

        public static string GetDownloadsPath() {
            string path = null;
            if (Environment.OSVersion.Version.Major >= 6) {
                IntPtr pathPtr;
                int hr = SHGetKnownFolderPath(ref FolderDownloads, 0, IntPtr.Zero, out pathPtr);
                if (hr == 0) {
                    path = Marshal.PtrToStringUni(pathPtr);
                    Marshal.FreeCoTaskMem(pathPtr);
                    return path;
                }
            }
            path = Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.Personal));
            path = Path.Combine(path, "Downloads");
            return path;
        }

        private static Guid FolderDownloads = new Guid("374DE290-123F-4565-9164-39C4925E467B");
        [DllImport("shell32.dll", CharSet = CharSet.Auto)]
        private static extern int SHGetKnownFolderPath(ref Guid id, int flags, IntPtr token, out IntPtr path);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ton 5

我可以使用环境直接调用,但必须添加ToString()到最后。直到我添加它,它才起作用。

saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Run Code Online (Sandbox Code Playgroud)