【发布时间】:2011-04-19 09:30:34
【问题描述】:
当我调用它们时,在 FileOpen 或 FileSave 对话框中,它们会自动转到最后打开的路径。即使我关闭我的应用程序并打开它,也会发生这种情况。但是如何将该路径/文件名获取到文本框或变量?
【问题讨论】:
-
我已经尝试过 InitialDirectory 属性。但是没有用。我还需要最后打开的文件名...可以使用哪个属性?
标签: c#
当我调用它们时,在 FileOpen 或 FileSave 对话框中,它们会自动转到最后打开的路径。即使我关闭我的应用程序并打开它,也会发生这种情况。但是如何将该路径/文件名获取到文本框或变量?
【问题讨论】:
标签: c#
这似乎有点奇怪,但在 Windows 7 下它可以与以下内容一起使用:
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
试试看,如果您需要进一步的帮助,请告诉我。
【讨论】:
大概信息存储在注册表深处的某个地方(它由非托管控件完成,OpenFileDialog 只是一个包装器)。最简单的方法可能是将上次关闭对话框时的路径保留在您可以访问的应用程序中。
【讨论】:
OpenFileDialog 不记得最后一个文件名 - 只记得最后一个目录。
这里提到:What does the FileDialog.RestoreDirectory Property actually do?
他们使用来自Environment.CurrentDirectory的路径。
【讨论】:
我遇到了与 Vicky 类似的问题,如下所示。我正在使用 Vista Business SP2 下的 Visual Basic 2008 Express Edition 进行开发。
我有一个带有 OpenFileDialog 和 SaveFileDialog 的应用程序。当我在第一次运行应用程序时调用 OpenFileDialog 时,它默认为应用程序上次打开/保存文件的目录。但是,此目录不是“Environment.CurrentDirectory”,它设置为“C:\Users\Brian\Documents\Visual Studio 2008\Projects\IFPM Analysis\IFPM Analysis\bin\Debug”,并且 OpenFileDialog 或保存文件对话框。
稍后在应用程序中,我调用 SaveFileDialog,并将代码中的初始目录属性 (.InitialDirectory) 设置为默认目录。当我随后调用 OpenFileDialog 时,它默认为 SaveFileDialog 使用的目录。 “Environment.CurrentDirectory”的值一直没有改变。
所以,我的问题是,OpenFileDialog 和 SaveFileDialog 使用的目录存储在哪里?我认为这与底层 FileDialog 类有关,而且我知道即使在应用程序关闭并重新启动后仍然存在。
理想情况下,我希望能够存储用户从 OpenFileDialog 中选择的目录,并在使用 SaveFileDialog 后将其重置。虽然我可以在应用程序中使用 OpenFileDialog 的 InitialDirectory 属性,但是当我关闭应用程序并重新启动它时,这对我没有帮助。遗憾的是,典型的用户操作是:
这意味着当用户回到应用程序时,默认目录是“错误的”目录。我知道我可以将 OpenFileDialog 中最后使用的目录保存在我自己的配置文件中,这样它就可以在应用程序之外持续存在,但是当 Windows 为我提供相同的功能时,这似乎有点愚蠢,只要我知道在哪里看!
感谢您的帮助!
谢谢, 布赖恩。
【讨论】:
最近打开的文件列表存储在两个地方:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU 下的文件列表中
这个方法可以帮你获取列表:
public static string GetLastOpenSaveFile(string extention)
{
RegistryKey regKey = Registry.CurrentUser;
string lastUsedFolder = string.Empty;
regKey = regKey.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU");
if (string.IsNullOrEmpty(extention))
extention = "html";
RegistryKey myKey = regKey.OpenSubKey(extention);
if (myKey == null && regKey.GetSubKeyNames().Length > 0)
myKey = regKey.OpenSubKey(regKey.GetSubKeyNames()[regKey.GetSubKeyNames().Length - 2]);
if (myKey != null)
{
string[] names = myKey.GetValueNames();
if (names != null && names.Length > 0)
{
lastUsedFolder = (string)myKey.GetValue(names[names.Length - 2]);
}
}
return lastUsedFolder;
}
成功! 约旦
【讨论】: