2011-04-19 83 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