【问题标题】:OpenFileDialog InitialDirectory doesn't workOpenFileDialog InitialDirectory 不起作用
【发布时间】:2012-02-07 16:49:42
【问题描述】:

我有这个代码:

OpenFileDialog dialog = new OpenFileDialog();
dialog.InitialDirectory = GetDataPath(...);
dialog.AutoUpgradeEnabled = false;
dialog.Filter = GetFilter(...);
if (dialog.ShowDialog(this) == DialogResult.OK)
{...}

我希望,在每次运行时,对话框都在同一个文件夹 - GetDataPath(...) 文件夹中,但它仍保留在最后选择的文件夹中。

这是正确的行为吗?你知道如何解决这个问题吗?如果 Windows 将上次使用的路径保存在注册表中,您知道如何找到它吗?

编辑1:

与:

dialog.AutoUpgradeEnabled = true;

正在按预期工作......

EDIT2:与这里Any known problems with getting SaveFileDialog's InitialDirectory property working in Windows 7?的问题相同

【问题讨论】:

  • 请注意,如果您有一个选定的文件名,则不使用 InitialDirectory ......但在您的示例代码中并非如此。
  • @Cody Gray 它不是重复的。我已经尝试过该解决方案,但它不起作用
  • 在问题中提及这一点是有道理的。你还尝试过什么?
  • 使用 dialog.AutoUpgradeEnabled = true;它工作正常......奇怪......

标签: c# winforms openfiledialog


【解决方案1】:

不要在 InitialDirectory 中包含文件名。仅路径。

From msdn:在 Windows Vista 上,如果 InitialDirectory 设置为完整文件名而不仅仅是目录路径,则初始目录将默认为应用程序路径或用户上次从中选择文件的目录.

【讨论】:

  • 这是我的回答。
【解决方案2】:

对我来说,这些答案没有帮助(Windows 7)。

我的路径如下所示:“C:/xxxx/yyyyy” 切换到反斜杠后它工作正常,我的路径现在看起来像这样:“C:\xxxxx\yyyyy”

【讨论】:

    【解决方案3】:

    可能需要设置RestoreDirectory

    OpenFileDialog dialog = new OpenFileDialog();
    dialog.InitialDirectory = GetDataPath(...);
    dialog.RestoreDirectory = true;
    dialog.AutoUpgradeEnabled = false;
    dialog.Filter = GetFilter(...);
    if (dialog.ShowDialog(this) == DialogResult.OK)
    {...}
    

    查看link

    【讨论】:

      【解决方案4】:

      我也尝试过在不同地方找到的不同“解决方案”,但一旦注册表中有 MRU 列表条目,它们似乎都不起作用:/ 但这是我自己的简单解决方法……

      不要设置对话框的InitialDirectory 属性,而是将FileName 属性设置为您的路径,但要结合选定的Filter,例如:

      dialog.FileName = Path.Combine(myPath, "*.*");
      

      【讨论】:

        【解决方案5】:

        在我的情况下它不起作用,因为“InitialDirectory”不存在。

            if (!Directory.Exists(InitialDirectory))
                Directory.CreateDirectory(InitialDirectory);
        

        【讨论】:

        • 这是有道理的,也是我的情况。无需其他修复
        【解决方案6】:

        我让代码以这种方式工作:

        dialog.InitialDirectory = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%") + "\\Videos";

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。 当我使用这段代码时:

          string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images\";
          

          那不显示初始目录。

          但如果我删除了最后的斜线:

          string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images";
          

          所以开始正确显示初始目录。 恢复反斜杠不会导致显示不正确,我不明白,但确实如此。

          【讨论】:

            【解决方案8】:

            我也遇到了这个问题,它只会显示最后使用的目录。我正在使用没有驱动器号的网络路径。我需要在服务器名称前添加另一个“\”。

            这不起作用:

            openFileDialog1.InitialDirectory = "\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";
            

            但这确实有效:

            openFileDialog1.InitialDirectory = "\\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";
            

            【讨论】:

              【解决方案9】:

              这发生在我身上,但问题不同。我用于InitialDirectory 的路径中有错字。当我修复它时,我很好。如果您遇到这种情况,请检查您的输出窗口:

              A first chance exception of type 'System.IO.FileNotFoundException' 
              occurred in System.Windows.Forms.dll
              

              【讨论】:

                【解决方案10】:

                我已经尝试了给出的解决方案但没有成功,但对我有用的是从我的路径中删除尾随的“/”。

                path = path.TrimEnd(new char[] { '\\' });
                

                然后它就可以正常工作了。

                【讨论】:

                  【解决方案11】:

                  请在发送InitialDirectory之前包含此功能。

                  public static string NormalizePath(string path)
                  {
                      if (path != "")
                      {
                          return Path.GetFullPath(new Uri(path).LocalPath)
                                     .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
                                     .ToUpperInvariant();
                      }
                      else
                      {
                          return "";
                      }
                  }
                  

                  【讨论】:

                    【解决方案12】:

                    我也遇到过这个问题。这是我修复它的方法:

                    假设 bakDir 是一个字符串,其中包含您希望用于 OpenFileDialog 的初始目录路径。

                            OpenFileDialog openFile = new OpenFileDialog();
                            if (!Directory.Exists(bakDir))
                            {
                                Directory.CreateDirectory(bakDir);
                            }
                            openFile.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"DbBackups";
                    

                    当你用选定的文件做完你的事情后,调用这个:

                            openFile = null;
                    

                    【讨论】:

                      【解决方案13】:

                      我解决了工作,在应用程序代码中输入这个¡¡¡¡¡¡¡¡¡¡¡¡¡

                      使用 oFolderBrowserDialog

                         .ShowNewFolderButton = True
                         .RootFolder = Environment.SpecialFolder.DesktopDirectory
                      
                            If Directory.Exists(RutaReteDescarga) Then
                      
                                 .SelectedPath = RutaReteDescarga
                                 .RootFolder = Environment.SpecialFolder.DesktopDirectory
                                  oFolderBrowserDialog.ShowDialog(Me)
                                  dRuta = .SelectedPath
                      
                          END IF
                      

                      结束

                      两次 DesktopDirectory,当我打开 WINDOWS 中出现默认路径的按钮时,我可以完美运行。

                      【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-08-19
                      • 1970-01-01
                      • 2012-11-25
                      相关资源
                      最近更新 更多