Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Анатолий (Киев)
Простого способа нет. Нужно получить список вложенных папок и искать файлы в каждой.
С помощью FSO получить такой список несложно. Вот функция:

Function GetSubfolderList(sTopFolder As String, col As Collection) As Long
'Возвращает количество папок, вложенных в sTopFolder, а в аргументе col - коллекцию
' путей ко всем этим папкам.
On Error Resume Next
Dim fso As Object   'FileSystemObject
Dim fd As Object    'Folder
Dim fds As Object   'Folders
 If col Is Nothing Then Set col = New Collection
    Set fso = CreateObject("Scripting.FileSystemObject")
 If Err <> 0 Then Err.Clear: GoTo Func_exit
 If Not fso.FolderExists(sTopFolder) Then GoTo Func_exit
    Set fd = fso.GetFolder(sTopFolder)
    Set fds = fd.SubFolders
 For Each fd In fds
'Добавляем путь к папке в коллекцию
    col.Add fd.Path
'Рекурсивно вызываем эту же функцию для получения дочерних папок
    Call GetSubfolderList(fd.Path, col)
 Next
    
Func_exit:
    GetSubfolderList = col.Count
    Set fd = Nothing: Set fds = Nothing: Set fso = Nothing
End Function

А вот функция поиска всех файлов или первого:

Function SearchTree(ByVal sTopFolder As String, ByVal sFileSpec As String, _
            Optional fFirstOnly As Boolean) As String
'Ищет в папке sTopFolder и вложенных папках файл(ы) по маске в sFileSpec.
'Возращает путь первому найденному файлу (fFirstOnly=True) или список всех найденных,
' разделенных символом ";".
Dim fds As Collection, i As Long
Dim sFolder As String, sFile As String, sFiles As String
    
    sFolder = Trim$(sTopFolder)
 If Len(sFolder) = 0 Or Len(Trim$(sFileSpec)) = 0 Then Exit Function
 If Right$(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
'Выполняется поиск в родительсой папке
    GoSub SearchFiles
'Создает коллекцию вложенных папок
    Call GetSubfolderList(sTopFolder, fds)
 For i = 1 To fds.Count
'Выполняется поиск во вложенных папках
    sFolder = fds(i) & "\": GoSub SearchFiles
 Next
    SearchTree = Mid$(sFiles, 2): GoTo Func_exit

SearchFiles:
'Подпрограмма поиска файлов.
    sFile = Dir(sFolder & sFileSpec)
 Do While Len(sFile) > 0
  If fFirstOnly Then SearchTree = sFolder & sFile: GoTo Func_exit
    sFiles = sFiles & ";" & sFolder & sFile
    sFile = Dir
 Loop
Return

Func_exit:
    Set fds = Nothing
End Function

Полученную стоку можно преобразовать в массив функцией Split.

>Да и Текст.txt<>текст.txt
Это уже архитектурное излишешество.
Получите все, а затем - сравнивайте.

ЗЫ. Честно говоря, эту функцию собирался написать давно, а взялся только сегодня, прочитав ваш вопрос. Так что - цените!


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.