2014-10-13 3 views
-1

Я после этого tutorial, чтобы сделать файл исследователь в Visual Basic 2010
Получить все каталоги

Эта строка кода Dim info As New DirectoryInfo("../..") получает каталог, где когда-либо была начата программа.

Мне было интересно, как я могу заставить программу перечислить каталоги на диске C, просто изменив предыдущую строку кода.

Это мой код у меня есть:

Private Sub PopulateTreeView() 
    Dim rootNode As TreeNode 

    Dim info As New DirectoryInfo("../..") 
    If info.Exists Then 
     rootNode = New TreeNode(info.Name) 
     rootNode.Tag = info 
     GetDirectories(info.GetDirectories(), rootNode) 
     TreeView1.Nodes.Add(rootNode) 
    End If 

End Sub 

Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, _ 
    ByVal nodeToAddTo As TreeNode) 

    Dim aNode As TreeNode 
    Dim subSubDirs() As DirectoryInfo 
    Dim subDir As DirectoryInfo 
    For Each subDir In subDirs 
     aNode = New TreeNode(subDir.Name, 0, 0) 
     aNode.Tag = subDir 
     aNode.ImageKey = "folder" 
     subSubDirs = subDir.GetDirectories() 
     If subSubDirs.Length <> 0 Then 
      GetDirectories(subSubDirs, aNode) 
     End If 
     nodeToAddTo.Nodes.Add(aNode) 
    Next subDir 

End Sub 
Public Sub New() 
    InitializeComponent() 
    PopulateTreeView() 

End Sub 'New 
Private Sub treeView1_NodeMouseClick(ByVal sender As Object, _ 
ByVal e As TreeNodeMouseClickEventArgs) _ 
    Handles TreeView1.NodeMouseClick 

    Dim newSelected As TreeNode = e.Node 
    listView1.Items.Clear() 
    Dim nodeDirInfo As DirectoryInfo = _ 
    CType(newSelected.Tag, DirectoryInfo) 
    Dim subItems() As ListViewItem.ListViewSubItem 
    Dim item As ListViewItem = Nothing 

    Dim dir As DirectoryInfo 
    For Each dir In nodeDirInfo.GetDirectories() 
     item = New ListViewItem(dir.Name, 0) 
     subItems = New ListViewItem.ListViewSubItem() _ 
      {New ListViewItem.ListViewSubItem(item, "Directory"), _ 
      New ListViewItem.ListViewSubItem(item, _ 
      dir.LastAccessTime.ToShortDateString())} 

     item.SubItems.AddRange(subItems) 
     listView1.Items.Add(item) 
    Next dir 
    Dim file As FileInfo 
    For Each file In nodeDirInfo.GetFiles() 
     item = New ListViewItem(file.Name, 1) 
     subItems = New ListViewItem.ListViewSubItem() _ 
      {New ListViewItem.ListViewSubItem(item, "File"), _ 
      New ListViewItem.ListViewSubItem(item, _ 
      file.LastAccessTime.ToShortDateString())} 

     item.SubItems.AddRange(subItems) 
     listView1.Items.Add(item) 
    Next file 

    listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) 

End Sub 
+1

Вы действительно не задумывались над этим, не так ли? Откройте проводник Windows, выберите свой диск C, а затем посмотрите путь в адресной строке. Это путь, который вы используете. Вернитесь снова, когда у вас есть вопрос о программировании. – jmcilhinney

+0

Я пробовал это, и я продолжаю получать ошибки. –

ответ

1

Вам нужно попробовать поймать для этого beaus будут файлы, на которые вы не имеете права доступа.
Чтобы перепрыгнуть код, вы используете Catch.

В противном случае вы получите ошибки, например, вы не можете получить доступ к файлам утилизации и так далее.

Итак, когда вы начинаете свой для каждого положить попробовать там. "Как код ниже"

изменения Dim информации As New DirectoryInfo (»../ .. "), чтобы затемнить информация As New DirectoryInfo (" C : \ ")

Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, _ 
ByVal nodeToAddTo As TreeNode) 

    Dim aNode As TreeNode 
    Dim subSubDirs() As DirectoryInfo 
    Dim subDir As DirectoryInfo 


    For Each subDir In subDirs 

     Try 

      aNode = New TreeNode(subDir.Name, 0, 0) 
      aNode.Tag = subDir 
      aNode.ImageKey = "folder" 
      subSubDirs = subDir.GetDirectories() 
      If subSubDirs.Length <> 0 Then 
       GetDirectories(subSubDirs, aNode) 
      End If 
      nodeToAddTo.Nodes.Add(aNode) 
     Catch ex As Exception 

     End Try 

    Next subDir 

End Sub 
+0

Я получил его, используя код и запуская программу в качестве администратора. Для запуска потребовалось около 15 секунд. Есть ли что-то, что я могу сделать, чтобы ускорить загрузку? Я знаю, что это не имеет ничего общего с исходным вопросом, но я использую древовидное представление и представление в виде списка, и мне было интересно, как я мог бы увеличить представление дерева при загрузке формы. Как я могу открыть файл в виде списка двойным щелчком? Благодаря! –

+0

Получил проблемы с администратором. –

+0

@Jared_S beter задайте новый вопрос, если вы хотите узнать разные вещи. Удовлетворителен вопрос в комментариях. И если я добавлю код в свой андерсер, он будет путать будущих читателей. – Creator

0

Ваша проблема заключается в том, что текущий код работает только если у вас есть полный доступ ко всем подкаталогах пути, который вы выбрали для перечисления.

Как минимум вам нужно внести некоторые предложения, чтобы сообщить об ошибках и обработать разрешения.

1

Я понял. Мне нужно было изменить файл манифеста и запустить программу как администратор. Спасибо вам за помощь.

Смежные вопросы