Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Обход дерева каталогов Добавлено: 04.12.08 08:01  

Автор вопроса:  Jasmin
Здравствуйте!

Поделитесь, пожалуйста, алгоритмом обхода дерева каталогов. Т. е. мне нужен полный список всех каталогов, как если бы я вручную по очереди открывала каждый каталог до самого конца и переписывала получившиеся пути.
Знаю, что нужно через рекурсию. Пробовала вот так:
Sub aa()
  Call aaaaa("D:\Work\Outlook\")
End Sub

Sub aaaaa(MyPath As String)
  MyName = Dir(MyPath, vbDirectory)
  Do While MyName <> ""    
    If MyName <> "." And MyName <> ".." Then
      If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
        Debug.Print MyPath & MyName & "\"
        Call aaaaa(MyPath & MyName & "\")
      Else
        Debug.Print MyPath & MyName
      End If
    End If
    MyName = Dir    
  Loop
End Sub

Все выполняется нормально до тех пор, пока "углубляемся" в первом каталоге до конца. Когда нужно сменить подкаталог на следующий выводит ошибку поиска в строке MyName = Dir
Не запоминает он, что нужно дальше искать. :-(

Вроде слышала, что есть функция WinAPI для похожего. Просветите, пожалуйста, как искать, что писать.

Спасибо.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #1 Добавлено: 04.12.08 10:34
  1. Private Sub aa()
  2.   Call aaaaa("C:\")
  3. End Sub
  4. Sub aaaaa(MyPath)
  5.     Dim cnt As Integer
  6.     Dim curdir() As String
  7.     Dim x As Integer
  8.     Dim MyName As String
  9.     Dim rcsprm As String
  10.     MyName = Dir(MyPath, 16)
  11.     Do While MyName <> ""
  12.         If MyName <> "." And MyName <> ".." Then
  13.             If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
  14.                 If (cnt Mod 10) = 0 Then
  15.                     ReDim Preserve curdir(cnt + 10)
  16.                 End If
  17.                curdir(cnt) = MyName
  18.                cnt = cnt + 1
  19.             End If
  20.         End If
  21.         MyName = Dir
  22.     Loop
  23.     For x = 0 To cnt - 1
  24.         rcsprm = MyPath & curdir(x) & "\"
  25.         Debug.Print rcsprm
  26.         Call aaaaa(rcsprm)
  27.     Next
  28.     DoEvents
  29. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #2
Добавлено: 04.12.08 12:13
Можешь попробовать перебор на API при помощи функций:
FindFirstFile/FindNextFile/FindClose

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 04.12.08 14:52
Father: Спасибо ОГРОМЕННОЕ! Как раз то, что нужно. :-)
mc-black: Буду смотреть, вдумчиво читать. :-)

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 04.12.08 14:55
Father:
Еще дурацкий вопрос :-) : Как вставлять в ответы такой же красивый код ? :-)

Ответить

Номер ответа: 5
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #5 Добавлено: 04.12.08 17:51
Jasmin: Как вставлять в ответы такой же красивый код ?

Обрамляйте ваш код тегами [ SOURCE ] ...красивый код... [ /SOURCE ] (без пробелов).
Тут админы снова намудрили. Когда нажимаешь на кнопку Ответить, то кнопка Код добавляет теги [ CODE ][ /CODE ], а когда отвечаешь непосредственно в окошке под сообщениями темы, то добавляются теги "красивого" кода [ SOURCE ][ /SOURCE ] =)

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 05.12.08 11:54
Ага, понятно теперь. Спасибо.
Вот код и обрамляла [ CODE ][ /CODE ]. А как случайно нажала в другом посте тоже "Код" и получила "красивый" код. :-)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам