Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему не работает? / 3 сообщений из 3, страница 1 из 1
14.12.2005, 10:48:16
    #33434995
S. Fedorenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Sub RunSearch2(SearchPath As String)
    Dim strFile As String
    
    strFile = Dir(SearchPath, vbDirectory)
    Do Until strFile = ""
        If strFile <> "." And strFile <> ".." Then
            If strFile <> "." And strFile <> ".." And (GetAttr(SearchPath & strFile) And vbDirectory) = vbDirectory Then
                RunSearch2 SearchPath & strFile & "\"
            Else
                Debug.Print strFile
            End If
        End If
        strFile = Dir ' на эту строчку ругается "Invalid procedure call or argument"
    Loop
End Sub
Подскажите что не так.
Нужно перебрать все файлики во всех подпапках в том числе
...
Рейтинг: 0 / 0
14.12.2005, 14:58:25
    #33435884
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не работает?
Dir c параметром и без работают в паре, поэтому когда выходишь из рекурсивного вызова - это попытка выполнить Dir еще раз, к той директории, которая уже возвращала пустое значение

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub RunSearch2(SearchPath As String)
    Dim strFile As String, FlagRec As Boolean, MN As String
    
    strFile = Dir(SearchPath, vbDirectory)
    Do Until strFile = ""
        If strFile <> "." And strFile <> ".." Then
            If strFile <> "." And strFile <> ".." And (GetAttr(SearchPath & strFile) And vbDirectory) = vbDirectory Then
                RunSearch2 SearchPath & strFile & "\"
                FlagRec = True
            Else
                Debug.Print strFile
            End If
        End If
        If FlagRec Then
          MN = Dir(SearchPath, vbDirectory)
          Do While MN <> strFile
            MN = Dir
          Loop
        End If
        strFile = Dir ' на эту строчку ругается "Invalid procedure call or argument"
    Loop
End Sub
...
Рейтинг: 0 / 0
14.12.2005, 15:20:41
    #33435962
Почему не работает?
Алтернатива.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub ListSubFiles(strPath As String)
    Dim fso As Scripting.FileSystemObject
    Dim fld As Scripting.Folder
    Dim fld2 As Scripting.Folder
    Dim fil As Scripting.File
    Dim strFolder As String
    
    If Right(strPath,  1 ) <> "\" Then
        strPath = strPath & "\"
    End If
    
    Set fso = New Scripting.FileSystemObject
    Set fld = fso.GetFolder(strPath)
    
    For Each fil In fld.Files
        Debug.Print fil.Name
    Next
    
    If fld.SubFolders.Count >  0  Then
        For Each fld2 In fld.SubFolders
            strFolder = fld2.Name
            Call ListSubFiles(strPath & strFolder)
        Next
    End If
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему не работает? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]