powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Поиск файлов и папок
13 сообщений из 13, страница 1 из 1
Поиск файлов и папок
    #34203233
sanyacom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовал FindFirstFile,FindNextFile с рекурсией ---

видит не все папки.

Не подскажете в чем может быть дело.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34203250
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего в рекурсии. К сожалению не знаю какие на нее ограничения накладываются.
Лучше воспользоваться циклами.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34203631
sanyacom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал, не помогло.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34205111
RUSYA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
Private Const MAX_PATH =  260 
Private Const INVALID_HANDLE_VALUE = - 1 
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String *  14 
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Public Declare Function RemoveDirectory Lib "kernel32.dll" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

Dim FindFile() As String
Dim CountFindFile


Private Sub InterateObject(Source As String, file$())
'Подпрограмма для поиска файлов
If Right(Source,  1 ) <> "\" Then Source = Source & "\"
Dim objName As String
Dim hSearch As Long
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
    Cont = True
    hSearch = FindFirstFile(Source & "*", WFD)
    If hSearch <> INVALID_HANDLE_VALUE Then
        Do While Cont
            objName = Left(WFD.cFileName, InStr(WFD.cFileName, Chr( 0 )) -  1 )
            If Not (objName = "." Or objName = "..") Then
                If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) =  0  Then
                   
                   For i =  0  To UBound(file$)
                    file$(i) = LCase(file$(i))
                    objName = LCase(objName)
                    
                    If InStr( 1 , file$(i), "*",  1 ) =  0  Then
                         If file$(i) = objName Then
                             FindFile$(CountFindFile) = Source & objName
                             CountFindFile = CountFindFile +  1 
                             ReDim Preserve FindFile$(CountFindFile)
                         End If
                     Else
                         If Spliting(file$(i), ".") = Spliting(objName, ".") Then
                             FindFile$(CountFindFile) = Source & objName
                             CountFindFile = CountFindFile +  1 
                             ReDim Preserve FindFile$(CountFindFile)
                         Else
                             e0$ = Left(Spliting(file$(i), "\"), InStr( 1 , Spliting(file$(i), "\"), ".",  1 ) -  1 )
                             If InStr( 1 , objName, ".",  1 ) -  1  >=  0  Then e1$ = Left(objName, InStr( 1 , objName, ".",  1 ) -  1 )
                                If e0$ = e1$ Then
                                   FindFile$(CountFindFile) = Source & objName
                                   CountFindFile = CountFindFile +  1 
                                   ReDim Preserve FindFile$(CountFindFile)
                                End If
                         End If
                    End If
                   Next i
                   
                Else
                    InterateObject Source & objName & "\", file$
                End If
            End If
           Cont = FindNextFile(hSearch, WFD)
        Loop
        Cont = FindClose(hSearch)
    End If
End Sub
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34206405
sanyacom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за код, но всеравно не помогло.
Понимаете в чем штука --- сами функции FindFirstFile,FindNextFil e не видят данные папки
(смотрел отладчиком)

И ещё раскопал, все эти папки помечены как готовы для архивирования.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34209824
sanyacom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Въехал как сделать, так что вопрос снят
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34210038
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как?
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34210613
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekи как?

Да хоть так (рекурсивный поиск по маске файла в указанном каталоге):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub Main()
    Dim fso As New Scripting.FileSystemObject
    
    FindFileInFolder fso.GetFolder("C:\Program Files\Far"), "*adm*.*"
End Sub

Private Sub FindFileInFolder(ff As Folder, sFile As String)
    Dim fo As Scripting.Folder, f As Scripting.File

    For Each f In ff.Files
        If f.Name Like sFile Then Debug.Print f.Path
    Next f
    For Each fo In ff.SubFolders
        FindFileInFolder fo, sFile
    Next fo
End Sub
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34211880
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это понятно, рекурсивный поиск и т.д.
автор говорил что эти методы не видят из-за того что для папок проставлено "готовы для архивирования", я именно про этот случай говорю, как он решил
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34212846
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekэто понятно, рекурсивный поиск и т.д.
автор говорил что эти методы не видят из-за того что для папок проставлено "готовы для архивирования", я именно про этот случай говорю, как он решил

Вообще-то как я написал работает нормально. Независимо от атрибута Архивный/Скрытий и пр.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34212858
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekэто понятно, рекурсивный поиск и т.д.
автор говорил что эти методы не видят из-за того что для папок проставлено "готовы для архивирования", я именно про этот случай говорю, как он решил

А в примере с API скорей всего WFD надо было правильно установить перед началом поиска - я не пробовал из-за полной не надобности.
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34220021
RUSYA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну можно внимательно посмотреть на строчку

If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then

и наверно ж станет всё понятно :)
...
Рейтинг: 0 / 0
Поиск файлов и папок
    #34221943
sanyacom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уже все понял и все получилось. Большое спс и респект!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Поиск файлов и папок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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