powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему не работает?
3 сообщений из 3, страница 1 из 1
Почему не работает?
    #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
Почему не работает?
    #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
Почему не работает?
    #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
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему не работает?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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