2013-06-21 54 views
4

我面臨一個問題,通過使用FolderBrowserDialog的fb.SelectedPath函數。 一切都很好,只要絕對路徑不包含任何「。」。FolderBrowserDialog和「。」在路徑名

例如:

try 
{ 
    if (arg == 1) 
     fb_dialog.SelectedPath = Path.GetFullPath(tb_path.Text); 
    else 
     fb_dialog.SelectedPath = Path.GetFullPath(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); 
} 
catch { fb_dialog.RootFolder = System.Environment.SpecialFolder.MyComputer; } 

如果System.Reflection.Assembly.GetExecutingAssembly()的位置不包含任何條目,將用戶導航到該文件夾​​ 「」假設路徑如下所示:「C:\ Prog」 但是,如果它返回一個帶「。」的路徑,就像「C:\ Prog.Test」一樣,它不起作用。它打開對話框,返回沒有錯誤,但在文件清理器的「根目錄」(如果指定的話,否則它的「桌面」)中找到。

任何想法如何解決這個問題?因爲它很煩人。

感謝您的幫助。

UPDATE:在這篇文章中解決了keyboardP:click me

+0

也許這裏有一個系統的問題,因爲我可以使用沒有錯誤以下路徑:'R:\文檔\表\ my.folder \ another.dot.folder' – DonBoitnott

+0

@terrybozzio你不得不做例如:'Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly()。FullName)' – DonBoitnott

回答

7

Path.GetDirectoryName不知道你是否已經具備在其一個點或一個文件擴展名的文件夾(如爲文件。 txt文本文件或文件夾?)。

如果你知道這是一個目錄,解決方法可能是做這樣的事情。

Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location + "\\") 

這確保了GetDirectoryName知道它是在尋找一個目錄,而不是在因爲後\的文件。

更新的答案基於評論

這個問題似乎FolderBrowserDialog具體(以上信息應在其他情況下工作)。我能夠重現你的問題,我設法找到一個相對hacky解決方法,但它似乎是一個錯誤FolderBrowserDialog所以這應該就足夠了。

如果將RootFolder屬性設置爲包含要輸入的路徑的屬性,它將起作用。例如,如果您將RootFolder設置爲,而您的輸入爲C:\...\My Documents\test.dot.folder,則應該可以工作。因此,解決方法遍歷SpecialFolders枚舉並設置第一個匹配項。

using (FolderBrowserDialog fbd = new FolderBrowserDialog()) 
{ 
    fbd.SelectedPath = Path.GetFullPath(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); 

    //find closest SpecialFolder that matches the input (can be expanded to not be case-sensitive) 
    foreach (var sf in Enum.GetValues(typeof(Environment.SpecialFolder))) 
    { 
     string spath = Environment.GetFolderPath((Environment.SpecialFolder)sf); 
     if (fbd.SelectedPath.Contains(spath)) 
     { 
      fbd.RootFolder = (Environment.SpecialFolder)sf; 
      break; 
     } 
    } 

    fbd.ShowDialog(); 
} 
+1

+1指出GetDirectoryName()沒有對輸入做任何假設。 – DonBoitnott

+0

它不影響這種情況。因爲它以編程方式在最後添加了一個子文件夾。它工作,如果路徑不包含點,但它不,如果有的話。 使用另一個文件夾結構進行測試。只要內部沒有點,它就會工作,並顯示我想要的工作文件夾。 – Thyrador

+0

當我在家時,我會提供一個截圖。只是爲了顯示問題,如果沒關係。 – Thyrador