Страница: 1 |
Страница: 1 |
Вопрос: СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ!!!!
Добавлено: 17.03.05 10:15
Автор вопроса: Leon
СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ!!!!
Как сделать поиск файла по части имени файлы???
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Novichek
Вопросов: 19
Ответов: 60
Профиль | | #1
Добавлено: 17.03.05 12:28
Используй рекурсивный поиск
If StopSearch = True Then Exit Sub
Dim Atr As Integer
Dim hFnd As Long
Dim WFD As WIN32_FIND_DATA
hFnd = FindFirstFile(Path & fName, WFD)
If hFnd = INVALID_HANDLE_VALUE Then Exit Sub
SearchForFiles File, Path
Do
Atr = (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)
If TrimNull(WFD.cFileName) <> "." And TrimNull(WFD.cFileName) <> ".." Then
If Atr > 0 Then
DoEvents
SearchForFolders fName, Path & TrimNull(WFD.cFileName) & "\", File
End If
End If
Loop While FindNextFile(hFnd, WFD)
FindClose hFnd
End Sub
Private Sub SearchForFiles(fName As String, Path As String)
If StopSearch = True Then Exit Sub
Dim Atr As Integer
Dim hFnd As Long
Dim WFD As WIN32_FIND_DATA
hFnd = FindFirstFile(Path & fName, WFD)
If hFnd = INVALID_HANDLE_VALUE Then Exit Sub
Do
Atr = (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)
If TrimNull(WFD.cFileName) <> "." And TrimNull(WFD.cFileName) <> ".." Then
If Atr > 0 Then
lstFiles.AddItem "[" & Path & TrimNull(WFD.cFileName) & "]"
Else
lstFiles.AddItem Path & TrimNull(WFD.cFileName)
End If
End If
Loop While FindNextFile(hFnd, WFD)
FindClose hFnd
End Sub
Использование: ищем все txt файлы на c:\ во всех подкаталогах (*.*)
SearchForFolders ( "*.*", "c:\", "*.txt"
Номер ответа: 2
Автор ответа:
Novichek
Вопросов: 19
Ответов: 60
Профиль | | #2
Добавлено: 17.03.05 12:29
не забудь добавить на форму листбокс (lstFiles)
Номер ответа: 3
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #3
Добавлено: 17.03.05 13:08
Блин! "Яндекс - найдется все"
Кому чтото нужно он пишет "Быстрее, братцы, - погибаю-ю". Назвал бы тему
"Поиск файлов по маске"
Проси в следующий раз поточнее. Какой язык программирования?
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
Private Sub InterateObject(Source As String)
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
List1.AddItem Source & objName
Else
InterateObject Source & objName & "\"
End If
End If
Cont = FindNextFile(hSearch, WFD)
Loop
Cont = FindClose(hSearch)
End If
End Sub
Private Sub Command1_Click()
Dim dblTimer As Double
dblTimer = Timer
List1.Clear
InterateObject "C:\"
Debug.Print Round(Timer - dblTimer, 2)
End Sub
Это самый быстрый метод который я знаю
В помеченной строке можешь сделать фильтр по маске (точно не знаю как)
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 17.03.05 13:17
Да, по моему в правилах запрещены такие имена тем.
Могут и череп влепить.