2011-03-24 14 views
5

我使用Windows API代碼包中的CommonOpenFileDialog作爲文件夾選取器對話框。我將InitialDirectory屬性設置爲Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)。但是,當我顯示對話框時,地址欄中的路徑是Libraries \ Documents(不是我所期望的C:\ users \ craig \ my文檔)。另外,如果我只按下「選擇文件夾」按鈕,我會看到一個對話框,說'你選擇了一個圖書館。請選擇一個文件夾。'如何獲取CommonOpenFileDialog的InitialDirectory作爲用戶的MyDocuments路徑而不是Libraries Documents?

有人知道爲什麼我的文件路徑被忽略,有利於'庫\文件'?更重要的是,如何讓對話框遵守我傳入的InitialDirectory值?

我使用該對話框中的代碼是:

if (CommonFileDialog.IsPlatformSupported) 
{ 
    var folderSelectorDialog = new CommonOpenFileDialog(); 
    folderSelectorDialog.EnsureReadOnly = true; 
    folderSelectorDialog.IsFolderPicker = true; 
    folderSelectorDialog.AllowNonFileSystemItems = false; 
    folderSelectorDialog.Multiselect = false; 
    folderSelectorDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
    folderSelectorDialog.Title = "Project Location"; 

    if (folderSelectorDialog.ShowDialog() == CommonFileDialogResult.Ok) 
    { 
     ShellContainer shellContainer = null; 

     try 
     { 
     // Try to get a valid selected item 
     shellContainer = folderSelectorDialog.FileAsShellObject as ShellContainer; 
     } 
     catch 
     { 
     MessageBox.Show("Could not create a ShellObject from the selected item"); 
     } 

     FilePath = shellContainer != null ? shellContainer.ParsingName : string.Empty; 
    } 
} 

感謝,

-Craig

+0

你從 「Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)」 得到什麼路徑? – 2011-03-24 21:41:53

+1

庫/文檔*是*您Win7上的我的文檔文件夾。有用。 – 2011-03-24 23:19:19

+0

@Brent:你得到的路徑是C:\ users \ Craig \ My Documents,假設Craig是你的用戶名 – Craig 2011-03-25 15:33:24

回答

2

首先,我很抱歉,我花了這麼長時間才明白你的問題。

我看到的消息是,當我嘗試是這樣的:

無法對 「圖書館\文件」操作,因爲它是 不是文件系統的一部分。

沒有什麼可說的了。庫是一個虛擬文件夾,它是各種不同實際文件夾的合併。

沒有真正的方法來避免這個錯誤。您已要求對話框返回文件夾,並且用戶未選擇文件夾。因此對話不能完成交易的一部分。

如果你進一步下降到文件夾結構,進入真實文件夾,那麼對話框將返回一個真實值。

+0

我並不反對友好名稱的顯示。但是,該對話框無法將友好名稱翻譯迴文件路徑,顯示'您選擇了一個庫'。請選擇一個文件夾,而不是'對話框。這就是我試圖避免使用文件路徑而不是庫路徑。 – Craig 2011-03-25 15:42:22

+0

@克雷格最後,我想我明白你的問題! – 2011-03-25 16:02:00

+0

@David:好的。因此,如果我無法阻止將初始目錄轉換爲庫路徑,那麼我是否可以將返回的庫路徑翻譯迴文件路徑,或者完全抓住它?例如,假設我更改對話框代碼,以使AllowNonFileSystemItems設置爲true。然後我運行對話框並選擇對話框左側的'庫'文件夾,然後按'選擇文件夾'按鈕。這將返回:: {031E4825-7B94-4DC3-B131-E946B44C8DD5}的'路徑'。我如何檢測到這不是文件路徑,因此我可以強制用戶再次嘗試? – Craig 2011-03-25 16:42:21

0

而不是

folderSelectorDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

嘗試

folderSelectorDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
+0

根據[文檔](http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx)MyDocuments和Personal是等效的。 – CodeNaked 2011-03-25 00:35:35

+0

不錯的想法,但不幸的是,它也產生了'你選擇了一個圖書館...'對話框。 – Craig 2011-03-25 15:44:14

相關問題