FindFileFack

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sad
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 18.12.2004 (Сб) 15:31
Откуда: тольятти

FindFileFack

Сообщение sad » 24.01.2005 (Пн) 14:34

Как искать .bmp файлы на ж.д. во всех папках и подпапках, а самое главное чтобы
их Pach записывался в какую-нибудь переменую, т.е. сколько найдено столько и переменных, допустим патч первого .bmp записывается в перемнную pPach1, второго
в pPach2 и т.д
очень нужно!!!!, а врубится че делать не могу, скачал гдето исходники FindFile
потрошил ее весь день - ни фига не разобрался, только исходники запорол!:(
H---E---L---P M---E
Значение - не имеет значения

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Сообщение АндрейБ » 24.01.2005 (Пн) 18:00

На счет поиска ничего сказать не смогу, с файлами мало пока работал.
А вот на счет переменных я могу подсказать, надеюсь будет полезно и правильно.
Зачем описывать уйму переменных, по моему легче создать таблицу в Access. Назови ее Path. Создай поле Path - мемо.
При нахождение нового .bmp-файла записывай путь к новому файлу в таблицу. В конце поиска у тебя будет таблица заполненная патчами к .bmp-файлам (пусть даже будет 1000000 файлов - для таблице это не проблема). Захотел снова провести поиск, просто очитил таблицу перед заполнением. Можешь ввести индекс - если нужно видеть в какой последовательности заполнялась таблица. :)

sad
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 18.12.2004 (Сб) 15:31
Откуда: тольятти

Сообщение sad » 25.01.2005 (Вт) 14:35

Спасибо я чето недагадался(КАК Я Мог?!?!)
но главная суть не в том чтобы их записывать(пути), а в том что я эти пути получить не могу
(вернее не знаю как)
Значение - не имеет значения

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 25.01.2005 (Вт) 17:36

Прога сохраняет все найденные пути на всех дисках в массив Paths$() и выводит общее их количество.
Код: Выделить всё
Option Explicit

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 GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

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

Dim FileCount&, DirCount&, Paths$()

Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function

Function FindFilesAPI(Path As String)
Dim FileName As String
Dim DirName As String
Dim dirNames() As String
Dim nDir As Integer
Dim I As Integer
Dim hSearch As Long
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
DoEvents
If Right(Path, 1) <> "\" Then Path = Path & "\"
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(Path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
If (DirName <> ".") And (DirName <> "..") Then
If GetFileAttributes(Path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD)
Loop
Cont = FindClose(hSearch)
End If
hSearch = FindFirstFile(Path & "*.bmp", WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = UBound(Paths) + 1
Paths(UBound(Paths)) = Path & FileName
ReDim Preserve Paths$(UBound(Paths) + 1)
Cont = FindNextFile(hSearch, WFD)
End If
Wend
Cont = FindClose(hSearch)
End If
If nDir > 0 Then
For I = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(Path & dirNames(I) & "\")
Next I
End If
End Function

Sub Form_Load()
Dim I&, N&
ReDim Paths$(0)
Screen.MousePointer = vbHourglass
For I = Asc("A") To Asc("Z")
N = N + FindFilesAPI(Chr(I) & ":\")
Debug.Print N - 1
Next
Screen.MousePointer = vbDefault
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 9

    TopList  
cron