Вопрос № 23584: Здравствуйте уважаемые эксперты!
Как можно организовать поиск файлов в компьютере ,например: *.txt,посредством Visual Basic.
Желательно пример.
Заранее благодарен!...
Вопрос № 23.584
Здравствуйте уважаемые эксперты!
Как можно организовать поиск файлов в компьютере ,например: *.txt,посредством Visual Basic.
Желательно пример.
Заранее благодарен!
Отправлен: 16.07.2005, 12:45
Вопрос задал: Матвеев Стас (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: _Виталий
Здравствуйте, Матвеев Стас!
Как-то писал такую функцию. Причем она ищет файлы и по нужному имени, а также по маске(*.txt или file.*). Все найденные файлы с полным путём сохраняет в переменной 'Report'. Также фунция предусматривает поиск нужного файла и его удаление, за это отвечает переменная'BOOL'- если 'True' то фунция ищет и удаляет, если 'False' то прсто поиск. Функция имеет входные параметры 'dir_name' имя папки где осуществляется поиск и 'FindFile' искомый файл. Причем если BOOL=True и FindFile="", то функция удалит директорию
'dir_name' вместе с вложенными папками. И еще имя директории в 'dir_name' не должно заканчиваться символом ''. Пример. На форму закинте одну кнопку, для поиска.
----------------------------------------------------------------
Dim Report As String
Dim BOOL As Boolean
Option Explicit
Private Sub Command1_Click()
BOOL = False
DirDF "c:Program files", "*.exe"
MsgBox Report
End Sub
Private Sub DirDF(ByVal dir_name As String, FindFile As String)
On Error Resume Next
Dim file_name As String
Dim files As Collection
Dim i As Integer
Set files = New Collection
file_name = Dir$(dir_name & "*.*", vbReadOnly + vbHidden + vbSystem + vbDirectory)
Do While Len(file_name) > 0
If (file_name <> "..") And (file_name <> ".") Then
files.Add dir_name & "" & file_name
End If
file_name = Dir$()
Loop
For i = 1 To files.Count
file_name = files(i)
' See if it is a directory.
If GetAttr(file_name) And vbDirectory Then
' It is a directory. Delete it.
DirDF file_name, FindFile
Else
' It's a file. Delete it.
file_name = LCase(file_name)
If BOOL = True Then
SetAttr file_name, vbNormal
Kill file_name
Else
If Left(FindFile, 1) = "*" Then
If Right(file_name, Len(FindFile) - 1) = Right(FindFile, Len(FindFile) - 1) Then Report = Report + file_name + vbCrLf
ElseIf Right(FindFile, 1) = "*" Then
If Mid(file_name, (InStrRev(file_name, "", -1, vbTextCompare) + 1), Len(FindFile) - 1) = Left(FindFile, Len(FindFile) - 1) Then Report = Report + file_name + vbCrLf
Else
If Mid(file_name, (InStrRev(file_name, "") + 1)) = FindFile Then Report = Report + file_name + vbCrLf
End If
End If
End If
Next i
If BOOL = True Then RmDir dir_name
End Sub
---------------------------------------------------------------------
Ответ отправил: _Виталий (статус: 4-ый класс)
Отправлен: 16.07.2005, 14:01 Оценка за ответ: 5 Комментарий оценки: Спасибо большое!
Отвечает: Залетин Виталий Викторович
Здравствуйте, Матвеев Стас!
Примера под рукой нет потому и не дам, а писать долго. Но могу сказать, что средствами бейсика файлы искать можно, используя рекрсивный вызов процедуры поиска, используя Dir$ (если искать в подкаталогах). Это не самый эффективный подход к этому вопросу.
Наиболее разумно использовать АПИ функции FindFirstFile, FindNextFile, FindClose. Походите по бейсик-сайтам - там полно таких примеров (vbnet.ru, vb.kiev.ua (на нем отличный АПИ-справочник))
--------- Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 2-ой класс)
Отправлен: 16.07.2005, 14:04 Оценка за ответ: 5 Комментарий оценки: Спасибо.