Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Поиск файлов и папок / 13 сообщений из 13, страница 1 из 1
15.12.2006, 14:28
    #34203233
sanyacom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
Использовал FindFirstFile,FindNextFile с рекурсией ---

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

Не подскажете в чем может быть дело.
...
Рейтинг: 0 / 0
15.12.2006, 14:31
    #34203250
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
Скорее всего в рекурсии. К сожалению не знаю какие на нее ограничения накладываются.
Лучше воспользоваться циклами.
...
Рейтинг: 0 / 0
15.12.2006, 15:55
    #34203631
sanyacom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
Попробовал, не помогло.
...
Рейтинг: 0 / 0
16.12.2006, 18:52
    #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
18.12.2006, 09:45
    #34206405
sanyacom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
Спасибо за код, но всеравно не помогло.
Понимаете в чем штука --- сами функции FindFirstFile,FindNextFil e не видят данные папки
(смотрел отладчиком)

И ещё раскопал, все эти папки помечены как готовы для архивирования.
...
Рейтинг: 0 / 0
19.12.2006, 11:31
    #34209824
sanyacom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
Въехал как сделать, так что вопрос снят
...
Рейтинг: 0 / 0
19.12.2006, 12:20
    #34210038
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
и как?
...
Рейтинг: 0 / 0
19.12.2006, 14:44
    #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
20.12.2006, 07:12
    #34211880
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
это понятно, рекурсивный поиск и т.д.
автор говорил что эти методы не видят из-за того что для папок проставлено "готовы для архивирования", я именно про этот случай говорю, как он решил
...
Рейтинг: 0 / 0
20.12.2006, 12:51
    #34212846
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файлов и папок
orunbekэто понятно, рекурсивный поиск и т.д.
автор говорил что эти методы не видят из-за того что для папок проставлено "готовы для архивирования", я именно про этот случай говорю, как он решил

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

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

If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then

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


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