FileDialog.RestoreDirectory属性实际上是做什么的?

28
我已经阅读了MSDN上该属性的相关信息,但我仍然不理解它到底是做什么的。
此处所说的“Gets or sets a value indicating whether the dialog box restores the current directory before closing”是指该属性用于设置或获取一个值,用以指示对话框在关闭前是否需要还原当前目录。
那么,“还原”当前目录具体指的是什么意思呢?谢谢您的帮助。
5个回答

30

据我所知,在Windows XP中,当您在SaveFileDialog上按下Save(或在OpenFileDialog上按下Open)时,文件保存的目录(或打开的目录)将设置为新的当前工作目录(即Environment.CurrentDirectory中的目录)。

通过设置FileDialog.RestoreDirectory = true,当您关闭FileDialog时,原始工作目录将被恢复。

在Windows Vista/Seven中,行为始终如FileDialog.RestoreDirectory = true所示(是的,即使您将其设置为false...)。


@linquize:我不知道,但我敢打赌它像Windows 7一样。 - digEmAll
8
我认为很多人(像我以前的自己)会假定由于文档描述不够清晰,这个属性会神奇地保存用户的“上次查看的目录”。MSDN文档应该在这里提供链接。 - chrnola
1
此功能未针对 WPF OpenFileDialog 实现。 - BeanFlicker

7
原始实现中的一个令人烦恼的怪癖是,在你选择完之后 应用当前目录 会更改为该文件夹,这意味着如果你期望文件操作相对于您的应用程序文件夹,它将会失败。
这意味着在使用对话框之前添加代码来捕获当前文件夹并在之后恢复它是一种常见做法。
这已经被修复了,所以它可以为你完成此操作,但更改 默认 行为可能会破坏依赖于这种怪癖的代码。因此,你需要通过此属性手动启用它。

1
我不知道句子“after you made your selection the current directory of your app changed to that folder”是什么意思。您能否重新表述一下? - Evgeniy Berezovsky
这意味着当用户打开一个文件时,整个应用程序的当前目录都会更改为该文件所在的目录,因此如果代码尝试打开一些内部文件,并且期望该文件在应用程序文件夹中而没有明确指定该文件夹,则无法找到该文件。 - user1318499
感谢您提供的最后一段内容,这是顶级答案所没有的。 - person27

0

在这里,我只谈论WinForms FileDialog,WPF FileDialog可能有不同的行为。

对于Win XP,在使用对话框期间当前目录会发生更改。

对于多线程应用程序,必须注意此问题。可以通过在新线程中运行循环来检查在切换到另一个文件夹时是否更改了当前目录,以轻松证明此问题。

对于Win 7 / mono,在使用对话框期间或之后当前目录不会更改。

因此,Win 7 / mono:不需要RestoreDirectory属性。


-1

当您在对话框中选择一个目录后,下次使用该对话框时它将会打开在上次使用的目录。使用此选项将恢复原始目录。


-1

如果设置为true,则文件对话框将始终打开默认文件路径(InitialDirectory属性)。


你确定吗?你有证据吗?官方的WinForms文档明确讨论了关闭行为,而不是打开行为。 - Kissaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接