Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > ПОМОГИТЕ С ПОИСКОМ ФАЙЛА НА VBS!!!!!!!!


Автор: LDA 9.2.2006, 13:15
Народ помогите пожалик, я недавно начал изучать VBS поэтому вопрос может показаться смешным но всеже
Вообщем ситуация следующая:
Есть некий каталог - назавем его основным (в нем может быть куча под каталогов)
Нужна найти полный путь до определенного файла (проще говоря осуществить поиск)
Причем поиск должен начинаться с основного каталога (и во всех его подкаталогов)

Автор: amt 16.2.2006, 23:29
Вообще эта тема рассматривалась. Чаще пользуйся поиском. Ссылку искать не стал, поэтому кидаю тебе материал из своих архивов (этот материал мне подкинули на этом форуме).


Вот пример рекурсивного обхода

Инструкция:

1. подключить к новому проекту dll.ку под названием scrrun.dll, которая сидит в системной директории.
2. поместить на форму кнопку и textbox (непереименовывая пока).
3. зафигачить на форму весь исходник, который находится ниже и наслаждаться при нажатии на кнопку.
4. если плохо наслаждается, то раскомментируйте пятую строку в функции Help.

Код

Dim fso As New FileSystemObject
Dim file As String
Dim inpath As String

Private Sub Command1_Click()
Dim exists As Boolean
exists = FileExists("ger.txt", "c:\")
Text1.Text = inpath
End Sub

Public Function FileExists(Name As String, Path As String) As Boolean
If (Not fso.FolderExists(Path)) Then
   Exit Function
End If
file = Name
FileExists = Help(Path)
End Function

Public Function Help(Path As String) As Boolean
On Error Resume Next
Dim fld As Folder
Dim sfld As Folder
Dim sflds As Object

'Text1.Text = Path

Set fld = fso.GetFolder(Path)
   
If fso.FileExists(file) Then
   gotfile = True
   Help = True
   Exit Function
End If

Set sflds = fld.SubFolders

For Each sfld In sflds
   fso.GetFolder (sfld)
   If fso.FileExists(sfld.Path & "\" & file) Then
       Help = True
       inpath = sfld.Path
       Exit Function
   Else
       If sfld.SubFolders Then
           Help = Help(sfld.Path)
           Do While (fso.FileExists(inpath & "\" & file))
                  Exit Function
           Loop
       End If
   End If
   DoEvents
Next
End Function



Автор ответа: cardinal
И предложил сделать так

Код


Dim fso As New FileSystemObject
Dim file As String
Dim inpath As String

Private Sub Command1_Click()
Dim exists As Boolean
exists = FileExists("flag.doc", "E:\")
Text1.Text = inpath
End Sub

Private Function FileExists(Name As String, Path As String) As Boolean
If (Not fso.FolderExists(Path)) Then
   Exit Function
End If
file = Name
If Right(Path, 1) <> "\" Then Path = Path & "\"
FileExists = Help(Path)
End Function

Private Function Help(Path As String) As Boolean
On Error Resume Next
Dim sfld As Folder

'Text1.Text = Path

'условие остановки рекурсии
If fso.FileExists(Path & file) Then
   inpath = Path
   Help = True
   Exit Function
End If

'погружение в рекурсию (в следующие подпапки)
For Each sfld In fso.GetFolder(Path).SubFolders
   DoEvents
   If Help(sfld.Path & "\") Then
       Help = True
       Exit For
   End If
Next
End Function

Автор: Akina 17.2.2006, 10:20
amt
Ему не на VB/VBA, а на VBScript...

LDA
хотя суть не меняется - точно также в VBS используй FSO. Даже по синтаксису многое совпадет. Пример же поиска (правда, нерекурсивного, но это неважно) через FSO есть в MSDN.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)