Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Почему не работает рекурсивный вызов Добавлено: 18.11.03 09:50  

Автор вопроса:  Malyav | Web-сайт: malyav.narod.ru | ICQ: 8440085 

Нужно вывести все файлы во всех вложенных папках. Пытался так

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

Loop

End Sub

Вхожу в рекурсию, (первая вложенная папка), выхожу из нее и в корневой на этапе st = Dir

"получаю wrong call or argument". Если закоментарить

BrowseFolder StartupPath & st

показывает все файлы в startup. Обошел я это дело окольной дорогой, но замедлилось дело сильно. Как думаете, в чем собака порылась?

Ответить

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

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



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #1
Добавлено: 18.11.03 10:22

Dir нельзя использовать в рекурсивных вызовах.

Рекурсивный обход папок решал при помощи FileSustemObject.

Ответить

Номер ответа: 2
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #2 Добавлено: 18.11.03 10:27
Можно поступить так:

Для текущей папки СНАЧАЛА построить список вложенных папок, а ПОТОМ
колбасить каждую из них.

Ответить

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



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 18.11.03 10:41
Я очень давно такой пример делал... Здесь качай:
http://vbnet.ru/FolderSearch.zip

Ответить

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



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #6
Добавлено: 18.11.03 10:59

Все таки выставлю на расмотрение мой метод рекурсивного обхода.

Цель найти файл в папке или в под папках.

Все найденые файлы возвращаются в коллекции

Private Sub FindFile(ByVal Path As String, ByVal FileName As String, ByVal colPath As Collection)
    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-сайт: www.hypertech.ru
 Профиль | | #8
Добавлено: 18.11.03 11:17

1) 2 Pashenko , убеждения, под влиянием некоторых доводом, могут меняться.

2) 2 Malyav , библиотека scrrun.dll ставится вместе с IE, поэтому если твоя прога бежит на компах с Win98 и выше, то и не о чем беспокоится.

3) "Не хочу тащить в проект лишнюю библиотеку " - а кто сказал что она лишняя? Она НЕОБХОДИМАЯ библиотека.

Ответить

Страница: 1 |

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



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