2011-04-19 85 views
5

在我打电话给FileOpen或FileSave对话框时,它们会自动转到上次打开的路径。即使关闭我的应用程序并打开它,也会发生这种情况。但是,如何将该路径/文件名称获取到文本框或变量?获取文件打开对话框中上次打开的文件

+0

我已经试过InitialDirectory属性。但没用。此外,我需要最后打开的文件名...哪些属性可以使用? – Vicky 2011-04-19 09:39:58

回答

2

似乎有点weired但在Windows 7下它与folling工作:

OpenFileDialog openFileDialog = new OpenFileDialog(); 
openFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); 

试试吧,告诉我,如果你需要进一步的帮助。

+0

我试图让值没有设置它。我需要获取上次打开的文件名。 – Vicky 2011-04-19 11:39:37

2

推测信息存储在注册表深处的某处(由非受控控件完成,其中OpenFileDialog只是一个包装)。最简单的方法可能是在您的应用程序上次关闭对话框的某个地方访问该对话框时,坚持路径。

+0

但是我有一个stange的行为,在VB .net开发的应用程序中,即使在应用程序关闭时,文本框中的值也得到保留,但不是在该版本中;在C#中打开# – Vicky 2011-04-19 11:41:55

+0

'OpenFileDialog'不记录最后一个文件名 - 只有最后一个目录。 – ChrisWue 2011-04-19 21:24:33

+0

ok至少如何获得dir名称? – Vicky 2011-04-20 03:40:07

1

我遇到类似Vicky的问题,如下所示。我正在使用Visual Basic 2008 Express Edition在Vista Business SP2下开发。

我有一个OpenFileDialog和SaveFileDialog应用程序。当我第一次运行应用程序时调用OpenFileDialog时,它默认为应用程序最后打开/保存文件的目录。但是,此目录不是“Environment.CurrentDirectory”,它被设置为“C:\ Users \ Brian \ Documents \ Visual Studio 2008 \ Projects \ IFPM分析\ IFPM分析\ bin \ Debug”,并且不会被OpenFileDialog或SaveFileDialog。

后来在应用程序中,我调用SaveFileDialog,将代码中的初始目录属性(.InitialDirectory)设置为默认目录。当我随后调用OpenFileDialog时,它默认为SaveFileDialog使用的目录。一直以来,“Environment.CurrentDirectory”的值都保持不变。

所以,我的问题是,OpenFileDialog和SaveFileDialog正在使用的目录被存储在哪里?我认为这与底层的FileDialog类有关,即使在关闭并重新启动应用程序后,我仍然会持续存在。

理想情况下,我希望能够存储用户从OpenFileDialog中选择的目录,并在使用SaveFileDialog后重置它。尽管我可以在应用程序中使用OpenFileDialog的InitialDirectory属性,但在关闭应用程序并重新启动时,这并不能帮助我。可悲的是,典型的用户操作是:

  • 开始应用
  • 打开文件,打开文件对话框
  • 保存文件,SaveFileDialog
  • 休假申请

这意味着,当用户回来应用程序,默认目录是“错误”的。我知道我可以将OpenFileDialog中最后一个使用的目录保存在我自己的配置文件中,以便它可以保存在应用程序之外,但是当Windows为我提供相同的功能时,如果我知道在哪里看,这似乎有点愚蠢!

任何帮助感激地收到!

谢谢, 布赖恩。

+0

这正是我想要的:)我教了关于将详细信息保存到配置文件的想法... – Vicky 2011-04-22 12:06:39

+1

我现在有一个解决方案。我在名为CurrentDirectory的My.Settings对象中创建了一个属性。然后我每次调用文件对话框时都明确地将其设置为用户选择的目录(我必须从所选的文件名中提取此文件)。我还使用文件对话框的.InitialDirectory方法将目录设置为My.Settings.CurrentDirectory。 此应用程序已关闭,因此解决了我的问题后仍然存在。布莱恩。 – 2011-04-22 22:59:34

+0

如果你有问题,你应该创建另一个线程,而不是在答案中提问。 – TheWanderingMind 2017-08-11 12:44:41

1

最近打开的文件列表存储在两个地方:

  • 最近的文件夹:最近的文件夹通常位于C:\ Documents和设置[个人信息] \近期(路径是不同的在Windows Vista下),它包含最近打开的文件的快捷方式。
  • 注册地:每一个文件在保存/打开对话框,对话框中选择时间,文件名是根据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; 
    } 

成功! Iordan