2017-09-03 40 views
1

我很抱歉如果我遺漏了一些簡單的東西,我還在學習。這是我第一次嘗試遞歸。這個程序應該做到以下幾點,首先我打開我的FileBrowserDialog,然後列表視圖在選定的文件夾內填充文件名。但是,當我選擇文件夾時,它會填充列表視圖,但我看不到任何名稱,我的列表視圖凍結。我知道它填充的原因是滾動條調整。這是我的代碼:項目不會出現在列表視圖

#region FileHandlers 



    void FolderSearch(string sFol) 
    { 
     try 
     { 
      foreach (string d in Directory.GetDirectories(sFol)) 
      { 
       foreach (string f in Directory.GetFiles(d)) 
       { 

        listView1.Items.Add(f); 
       } 
       FolderSearch(d); 
      } 
     } 
     catch (System.Exception excpt) 
     { 
      MessageBox.Show(excpt.Message); 
     } 
    } 

    public void ChooseFolder() 
    { 
     string pPath; 

     if(folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
     { 
      pPath = folderBrowserDialog1.SelectedPath; 

      FolderSearch(pPath); 
     } 
    } 

    #endregion 
    void Button1Click(object sender, EventArgs e) 
    { 
     ChooseFolder(); 
    } 
+0

凍結背後的原因可能是所選文件夾的非常大的層次結構。嘗試加載所選文件夾的文件名並查看是否面臨相同的問題。註釋行'FolderSearch(d);'看到它只填充選定文件夾的文件名的列表視圖。 –

+0

不幸的是,我試過這個以及使用一個測試文件夾,其中只有一對文件夾。似乎沒有任何工作。 –

+0

您的代碼嘗試在加載所選文件夾的文件之前加載所選文件夾及其文件的子目錄。因此,如果子目錄中沒有任何文件,即使所選文件夾中有文件,也不會有任何項目添加到列表視圖中。 –

回答

1

您的代碼跳過選定的文件夾,它只會選擇的文件夾內得到的子文件夾的文件,因爲你第一次調用GetDirectories方法,如果你沒有選擇的文件夾或子文件夾內子文件夾沒有文件,它不會得到任何文件。

試試這個

void FolderSearch(string sFol) 
    { 
     try 
     { 
      foreach (string f in Directory.GetFiles(sFol)) 
      { 
       listView1.Items.Add(f); 
      } 

      foreach (string d in Directory.GetDirectories(sFol)) 
      {     
       FolderSearch(d); 
      } 
     } 
     catch (System.Exception excpt) 
     { 
      MessageBox.Show(excpt.Message); 
     } 
    } 

而且,如果你只想從System.IO.Path類文件名使用GetFileName方法。 listView1.Items.Add(Path.GetFileName(f));

+1

我實際上已經設法在解決這個問題之前解決它,但是我用你提到的類似方法做了。不過謝謝你的幫忙。你說的最後一點實際上是我的下一個任務,所以謝謝你! –