опубликован 13-11-2001 23:16 MSK
Через WinAPI...
Вот тебе примерчик. Производит поиск файла на диске C: . Чтобы он работал, создай на форме текстовое поле Text1 (для ввода имени файла) и кнопку Command1 (для начала поиска)...Option Explicit
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_ATTRIBUTE_COMPRESSED = &H800
Const MAX_PATH = 260
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 Function ASCIIZ2VB(ByVal Str As String) As String
Dim i As Integer
For i = 1 To Len(Str)
If Mid(Str, i, 1) = Chr(0) Then
Exit For
Else
ASCIIZ2VB = ASCIIZ2VB + Mid(Str, i, 1)
End If
Next i
End Function
' Ищет файл Name в каталоге StartDir и во всех его подкаталогах
' Возвращает имя найденного файла или пустую строку, если файл найти не удалось
Private Function FileFind(ByVal Name As String, ByVal StartDir As String) As String
Static Finish As Boolean
Dim Data As WIN32_FIND_DATA
Dim Handle As Long, Result As Long
Dim FileName As String
If Right(StartDir, 1) <> "\" And Right(StartDir, 1) <> "/" And Right(StartDir, 1) <> ":" Then
StartDir = StartDir + "\"
End If
Caption = StartDir ' Выводит в заголовке окна имя каталога, в котором производится поиск
DoEvents ' А это чтобы выводилось :)))
Finish = False
Result = FindFirstFile(StartDir + "*.*", Data)
Handle = Result
Do While Result > 0
FileName = ASCIIZ2VB(Data.cFileName)
If (Data.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) > 0 Then
If FileName <> "." And FileName <> ".." Then
FileName = FileFind(Name, StartDir + FileName + "\")
End If
ElseIf UCase(FileName) = UCase(Name) Then
FileName = StartDir + FileName
Finish = True
End If
If Finish Then FileFind = FileName: Exit Do
Result = FindNextFile(Handle, Data)
Loop
FindClose (Handle)
End Function
Private Sub Command1_Click()
Dim S As String
S = FileFind(Text1, "C:\")
If S = "" Then
MsgBox ("File not found on disk C: !")
Else
MsgBox ("File is found: " + S)
End If
End Sub