设置SaveFileDialog的初始目录?

tom*_*ene 36 .net c# wpf winapi

我想要一个具有以下行为的SaveFileDialog:

  • 第一次打开它时,它会转到"我的文档".

  • 然后,它会转到最后选择的文件夹.实现这一目标的最佳方法是什么?

如果我没有设置InitialDirectory,它会进入exe的目录 - 这不是我想要的.它记住了最后选择的目录 - 即使在执行之间.

如果我设置了InitialDirectory,它就不记得最后选择的目录了.当然,我可以在注册表中保存最后选择的目录:(但我正在寻找更好的解决方案.

      SaveFileDialog dialog = new SaveFileDialog();
      //??? dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
      dialog.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

And*_*are 33

您需要设置RestoreDirectoryto true以及InitialDirectory属性.

  • 真?对我不起作用.它总是导航到InitialDirectory? (8认同)
  • 另请参阅此主题,程序员说将"RestoreDirectory"设置为true无效:http://discuss.joelonsoftware.com/default.asp?dotnet.12.424113.2 (3认同)
  • 我遇到了同样的问题,但最终能够解决它(例如,请参阅我对此问题的回答)。由于某种原因,将完整路径传递到 Path.GetFullPath() 中,然后将 InitialDirectory 设置为它就可以了。 (2认同)

Jef*_*mon 16

我不知道为什么会这样,但我终于能够让它为我工作.

我发现如果我给出完整路径,它将无法工作,但如果我将完整路径放在Path.GetFullPath()中,那么它将起作用.查看之前和之后的值表明它们是相同的,但如果没有它,它将始终不起作用,并使用它.

//does not work
OpenFileDialog dlgOpen = new OpenFileDialog();
string initPath = Path.GetTempPath() + @"\FQUL";
dlgOpen.InitialDirectory = initPath;
dlgOpen.RestoreDirectory = true;

//works
OpenFileDialog dlgOpen = new OpenFileDialog();
string initPath = Path.GetTempPath() + @"\FQUL";
dlgOpen.InitialDirectory = Path.GetFullPath(initPath);
dlgOpen.RestoreDirectory = true;
Run Code Online (Sandbox Code Playgroud)

  • 这对我没有帮助(Windows 7,64位,.net framework 4.5.1) (3认同)

小智 5

在设置初始目录属性之前,请确保检查目录路径是否存在。如果目录不存在,则创建该目录。IE

if (!Directory.Exists(FooDirectory))
{
     Directory.CreateDirectory(FooDirectory);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以只调用 Directory.CreateDirectory(FooDirectory),如果目录已经存在,它不会抛出错误。 (3认同)