2013-12-20 88 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 
相关问题