Страница: 1 |
Нужно вывести все файлы во всех вложенных папках. Пытался так Private Sub BrowseFolder(StartupPath As String) Dim stenp As String Dim i As Integer If Right$(StartupPath, 1) <> "\" Then StartupPath = StartupPath & "\" Dim st As String st = Dir(StartupPath & "*.*", vbDirectory) Do While Len(st) > 0 st = Dir If (GetAttr(StartupPath & st) And vbDirectory) = vbDirectory Then If InStr(1, st, ".") = 0 Then If st <> "" Then 'вызываю опять эту функцию BrowseFolder StartupPath & st End If End If Else Debug.Print StartupPath & st Text1.Text = Text1.Text & StartupPath & st & vbCrLf Text1.SelStart = Len(Text1.Text) DoEvents End If End Sub Вхожу в рекурсию, (первая вложенная папка), выхожу из нее и в корневой на этапе st = Dir "получаю wrong call or argument". Если закоментарить BrowseFolder StartupPath & st показывает все файлы в startup. Обошел я это дело окольной дорогой, но замедлилось дело сильно. Как думаете, в чем собака порылась?
Dir нельзя использовать в рекурсивных вызовах. Рекурсивный обход папок решал при помощи FileSustemObject. Все таки выставлю на расмотрение мой метод рекурсивного обхода. Цель найти файл в папке или в под папках. Все найденые файлы возвращаются в коллекции Private Sub FindFile(ByVal Path As String, ByVal FileName As String, ByVal colPath As Collection) 'погружение в рекурсию 1) 2 Pashenko , убеждения, под влиянием некоторых доводом, могут меняться. 2) 2 Malyav , библиотека scrrun.dll ставится вместе с IE, поэтому если твоя прога бежит на компах с Win98 и выше, то и не о чем беспокоится. 3) "Не хочу тащить в проект лишнюю библиотеку " - а кто сказал что она лишняя? Она НЕОБХОДИМАЯ библиотека. Страница: 1 |
Вопрос: Почему не работает рекурсивный вызов
Добавлено: 18.11.03 09:50
Автор вопроса: Malyav | Web-сайт:
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #1
Добавлено: 18.11.03 10:22
Номер ответа: 2
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #2
Добавлено: 18.11.03 10:27
Можно поступить так:
Для текущей папки СНАЧАЛА построить список вложенных папок, а ПОТОМ
колбасить каждую из них.
Номер ответа: 3
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #3
Добавлено: 18.11.03 10:27
Не хочу тащить в проект лишнюю библиотеку
Номер ответа: 4
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #4
Добавлено: 18.11.03 10:37
Можно DirListBox поюзать.
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 18.11.03 10:41
Я очень давно такой пример делал... Здесь качай:
http://vbnet.ru/FolderSearch.zip
Номер ответа: 6
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #6
Добавлено: 18.11.03 10:59
Dim objFileSystem As Object
Dim objFolder As Object
Dim objSubFolder As Object
Dim Ret As String
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSystem.GetFolder(Path)
Set objSubFolder = objFolder.SubFolders
For Each objFolder In objSubFolder
FindFile Path & objFolder.Name & "\", FileName, colPath
Next
'поиск файла
Ret = Dir(Path & FileName)
While Ret > ""
colPath.Add Path
Ret = Dir()
Wend
End Sub
'Call to function
Dim colPath As New Collection
FindFile sDesktopPath, sFileName, colPath
Номер ответа: 7
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #7
Добавлено: 18.11.03 11:10
> Все таки выставлю на расмотрение мой метод рекурсивного обхода.
Человек же прямо сказал, что FSO не хочет цеплять.
Номер ответа: 8
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #8
Добавлено: 18.11.03 11:17