Советы тем, кто программирует на VB & VBA

Листинг 3. Перемещение по дереву файловой системы

Public DirCounter% ‘ текущее число просмотренных каталогов

Public Sub HowManyFilesInThisDirectory(PathName$, FileName$,  _
    FileCounter%)
‘
‘  подсчет числа найденных файлов по заданному шаблону:
‘  PathName$ - каталог
‘  FileName$ - шаблон имени файла
‘  FileCounter% - текущее значение счетчика найденных файлов
‘==================================================
    Dim MyFile$, MyDirCount%
    Dim NewPathName$, i%
   
    DirCounter% = DirCounter% + 1 ‘ смотрим очередной каталог
    ‘
    ‘ подсчет файлов в данном каталоге:
    MyFile$ = Dir(PathName$ + FileName$) ‘ первый поиск
    Do While MyFile$ <> “”
        FileCounter% = FileCounter% + 1
        ‘ тут можно выполнить какую-нибудь операцию с файлом
        MyFile$ = Dir  ‘ следующий поиск
    Loop
    ‘
    ‘ определяем состав подкаталогов в данном каталоге
    ReDim arrPath$(100)  ‘ для списка подкаталогов
    Call CurrentDirCounter(PathName$, “”, MyDirCount%, _
       arrPath$(), vbDirectory)
    ‘
    If MyDirCount% > 0 Then ‘есть подкаталоги
        For i% = 1 To MyDirCount%
            ‘ !! рекурсивное обращение к САМОЙ СЕБЕ!!
            NewPathName$ = PathName$ + arrPath$(i) + “\”
            Call HowManyFilesInThisDirectory(NewPathName$, _
                 FileName$, FileCounter%)
        Next
    End If
End Sub

Public Sub CurrentDirCounter(PathName$, FileName$, MyDirCount%,
arrPath$(), attr%)
‘
‘  Формирование списка имен элементов (attr% задает тип)
‘  в текущем каталоге
‘
    Dim MyDir$
   
    MyDirCount% = 0 ‘счетчик подкаталогов в текущем каталоге
    MyDir$ = Dir(PathName$ + FileName$, attr%) ‘первый поиск
                                              ‘ подкаталогов
    Do While MyDir$ <> “”
        If MyDir$ <> “.” And MyDir$ <> “..” Then
            If GetAttr(PathName$ + MyDir$) = attr% Then
              ‘ найден каталог
                MyDirCount% = MyDirCount% + 1
                If MyDirCount% > UBound(arrPath$) Then
                    ‘ увеличивает размер массива
                    ‘ с сохранением старой информации
                    ReDim Preserve arrPath$(UBound(arrPath$) + 100)
                End If
                arrPath$(MyDirCount%) = MyDir$
            End If
        End If
    MyDir$ = Dir  ‘ следующий поиск
    Loop
End Sub

возврат


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует