2013-12-20 47 views
1

我有一個表單,允許您單擊一個按鈕,它會觸發一個OpenFileDialog。從那裏,你假設在該文件夾中選擇一個特定的文件,然後該程序應該從你在/subjects文件夾中的文件夾開始並列出這些目錄。GetDirectory將不會列出所有目錄

目前,我有3個目錄/subjectsenglish,mathematicscte

我的問題是,當程序運行時,它只會列出組合框中的英文目錄,而不會列出任何其他目錄。

Private Sub btnDocumentChoice_Click(sender As Object, e As EventArgs) Handles btnDocumentChoice.Click 
    Dim ofd As New OpenFileDialog 
    Dim DirList As New ArrayList 
    If ofd.ShowDialog = Windows.Forms.DialogResult.OK AndAlso ofd.FileName <> "" Then 
     strRootLocation = (Path.GetDirectoryName(ofd.FileName)) 
     GetDirectories(strRootLocation + "/subject/", DirList) 
     'MessageBox.Show(Path.GetDirectoryName(ofd.FileName)) 
    End If 
End Sub 


Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk 
    strRootLocation = OpenFileDialog1.FileName 
    cmbSubject.Items.Add(strRootLocation) 
End Sub 

Sub GetDirectories(ByVal StartPath As String, ByRef DirectoryList As ArrayList) 
    Dim Dirs() As String = Directory.GetDirectories(StartPath) 
    DirectoryList.AddRange(Dirs) 
    For Each Dir As String In Dirs 
     GetDirectories(Dir, DirectoryList) 
     cmbSubject.Items.Add(Replace(Path.GetDirectoryName(Dir), strRootLocation + "\subject", "")) 
     cmbSubject.Items.Remove("") 
    Next 
End Sub 
+2

您的內部GetDirectories每個循環破壞DirectoryList。所以你只會看到最後找到的目錄。使用調試器輕鬆查看btw,只需在遍歷代碼時添加一個WatchList DirectoryList。 –

+0

那麼,我會如何解決這個問題呢?請原諒我的失明...... –

+0

無法猜測你爲什麼添加GetDirectories調用。只要刪除它。如果要通過子目錄遞歸,請將GetDirectories更改爲返回列表的函數。 –

回答

0

我設法去除對於這個問題每個迴路,以及與此替換它來解決自己的問題:

 Dim directories As String 
    For Each directories In Directory.GetDirectories(strRootLocation + "\subject") 
     cmbSubject.Items.Add(Replace(directories, strRootLocation + "\subject\", "")) 
    Next 
相關問題