Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Поиск файлов по шаблону


Автор: Гость_Новичок 16.4.2005, 06:42
как сделать програмку нахождения всех файлов с расширением jpg на всех жестких дисках и сохранения результата в файл.

Автор: Akina 16.4.2005, 11:11
for %%a in (c d e f) do dir /s %%a:\*.jpg >> c:\jpg.txt

Автор: Exception 16.4.2005, 12:11
Вообще-то у виндов есть апи ф-ция FindFile как-то так.

Автор: Guest 16.4.2005, 13:20
for %%a in (c d e f) do dir /s %%a:\*.jpg >> c:\jpg.txt

пишет ошибку помечая значок % в самом начале

Автор: boevik 16.4.2005, 13:43
Akina-шутник, дал команду для bat файла, который создает файл c:\jpg.txt со списком всех файлов с расширением jpg.

А для VB, поищи в FAQ-e есть в нем кое какая инфа.
К примеру: http://vingrad.ru/VB-VB-002018

Автор: Exception 16.4.2005, 14:57
В факе написано как это делать объектами. Проблемы: объектные переменные сильно тормозят. Лучше юзать FindFirstFile smile

Автор: Guest 17.4.2005, 06:06
Дайте текст проги.

Автор: Exception 17.4.2005, 12:38
В FAQ'е ведь написано? А если тебе с апи надо, так и скажи, я напишу.

Автор: Gannibal 17.4.2005, 13:20
ВЫБРАТЬ ВСЕ ФАЙЛЫ ПО МАСКЕ В ПОДДЕРЕВЕ КАТАЛОГОВ

Поскольку этот код не использует API, Вы можете легко перенести его с 16- на 32-разрядную платформу и обратно. Процедура DirWalk позводит Вам просмотреть все поддерево, начиная с заданнного места:

ReDim sArray(0) As String
Call DirWalk("OLE*.DLL", "C:\", sArray)

Эта процедура принимает * и ? в первом аргументе, который задает маску поиска. Вы можете задать несколько масок, разделяя их символом «;», например, "OLE*.DLL; *.TLB". Второй аргумент - место старта, третий аргумент - массив строк.
Эта процедура рекурсивно проходит по всем каталогам и кладет все файлы, удовлетворяющие условию, в массив sArray с указанием полного пути. Этот массив меняет свои размеры в зависимости от количества файлов, удовлетворяющих условиям поиска.
Для использовния DirWalk, пихните два контрола, FileListBox и DirListBox, на форму. Эта процедура подразумевает, что она работает с контролами на текущей форме: : FileListBox по имени File1, и DirListBox по имени Dir1. Для увеличения скорости работы сделайте эти контролы невидимыми. Использование этих контролов не требует приобретения дополнительных тулзов, так как они (контролы) содержатся в базовой библиотеке контролов VB.

Код

Sub DirWalk(ByVal sPattern As String, ByVal CurrDir As String, sFound() As String)
Dim i As Integer
Dim sCurrPath As String
Dim sFile As String
Dim ii As Integer
Dim iFiles As Integer
Dim iLen As Integer

If Right$(CurrDir, 1) <> "\" Then
        Dir1.Path = CurrDir & "\"
Else
        Dir1.Path = CurrDir
End If
For i = 0 To Dir1.ListCount
        If Dir1.List(i) <> "" Then
                DoEvents
                Call DirWalk(sPattern, Dir1.List(i), sFound())
        Else
                If Right$(Dir1.Path, 1) = "\" Then
                        sCurrPath = Left(Dir1.Path, Len(Dir1.Path) - 1)
                Else
                        sCurrPath = Dir1.Path
                End If
                File1.Path = sCurrPath
                File1.Pattern = sPattern
                If File1.ListCount > 0 Then
                        ' нужные файлы найдены в каталоге
                        For ii = 0 To File1.ListCount - 1
                                ReDim Preserve sFound(UBound(sFound) + 1)
                                sFound(UBound(sFound) - 1) = sCurrPath & "\" & File1.List(ii)
                        Next ii
                End If
                iLen = Len(Dir1.Path)
                Do While Mid(Dir1.Path, iLen, 1) <> "\"
                        iLen = iLen - 1
                Loop
                Dir1.Path = Mid(Dir1.Path, 1, iLen)
        End If
Next i
End Sub 

Автор: efedron 18.4.2005, 14:41
Код

Private Declare Function SearchTreeForFile Lib "imagehlp" (ByVal RootPath As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String) As Long
Private Const MAX_PATH = 260

Private Sub Form_Load()
    Dim tempStr As String, Ret As Long
    tempStr = String(MAX_PATH, 0)
    Ret = SearchTreeForFile("c:\", "explorer.exe", tempStr)
    If Ret <> 0 Then
        MsgBox "Файл найден в  " + Left$(tempStr, InStr(1, tempStr, Chr$(0)) - 1)
    Else
        MsgBox "Файл не найден"
    End If
End Sub


Автор: Exception 19.4.2005, 11:09
А я и не знал о такой функции! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)