Artigo: 185601 - Última revisão: sexta-feira, 28 de Dezembro de 2007 - Revisão: 2.0

COMO: Pesquisar Directórios Recursivamente Utilizando FileSystemObject

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo passo-a-passo demonstra como utilizar a classe FileSystemObject para procurar directórios recursivamente e localizar ficheiros específicos.

Informações Sobre a Classe FileSystemObject

A classe FileSystemObject está localizada no Microsoft Scripting Runtime (Scrrun.dll). Para obter o ficheiro Scrrun.dll, instale qualquer um dos pacotes seguintes:
  • Microsoft Windows Script Host
  • Microsoft Windows NT Option Pack
  • Microsoft Internet Information Server 3.0
  • Actualização do Scripting 3.1
  • Microsoft Visual Studio 98
  • Microsoft Visual Basic 6.0
A classe FileSystemObject proporciona um desempenho superior ao da utilização das funções intrínsecas do Visual Basic, tais como Dir e GetAttr. Para além disso, FileSystemObject é muito mais simples de implementar do que as funções intrínsecas do Visual Basic.

Criar o Exemplo

  1. Crie um novo projecto EXE Padrão no Visual Basic. Por predefinição, é criado o Form1.
  2. No menu Project, clique em References e, em seguida, adicione uma referência ao Microsoft Scripting Runtime. Se esta opção não estiver listada, localize o ficheiro Scrrun.dll no seu sistema. Se for necessário, instale uma das ferramentas listadas na secção Informações Sobre a Classe FileSystemObject.
  3. Adicione um CommandButton, a Label e um controlo ListBox ao Form1. Ajuste a largura do controlo Label de modo a que seja igual à largura do formulário.
  4. Adicione o código seguinte à secção General Declarations do Form1:
    Option Explicit
    
    Dim fso As New FileSystemObject
    Dim fld As Folder
    
    Private Sub Command1_Click()
       Dim nDirs As Long, nFiles As Long, lSize As Currency
       Dim sDir As String, sSrchString As String
       sDir = InputBox("Type the directory that you want to search for", _
                       "FileSystemObjects example", "C:\")
       sSrchString = InputBox("Type the file name that you want to search for", _
                       "FileSystemObjects example", "vb.ini")
       MousePointer = vbHourglass
       Label1.Caption = "Searching " & vbCrLf & UCase(sDir) & "..."
       lSize = FindFile(sDir, sSrchString, nDirs, nFiles)
       MousePointer = vbDefault
       MsgBox Str(nFiles) & " files found in" & Str(nDirs) & _
              " directories", vbInformation
       MsgBox "Total Size = " & lSize & " bytes"
    End Sub
    
    Private Function FindFile(ByVal sFol As String, sFile As String, _
       nDirs As Long, nFiles As Long) As Currency
       Dim tFld As Folder, tFil As File, FileName As String
       
       On Error GoTo Catch
       Set fld = fso.GetFolder(sFol)
       FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                      vbHidden Or vbSystem Or vbReadOnly)
       While Len(FileName) <> 0
          FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, _
          FileName))
          nFiles = nFiles + 1
          List1.AddItem fso.BuildPath(fld.Path, FileName)  ' Load ListBox
          FileName = Dir()  ' Get next file
          DoEvents
       Wend
       Label1 = "Searching " & vbCrLf & fld.Path & "..."
       nDirs = nDirs + 1
       If fld.SubFolders.Count > 0 Then
          For Each tFld In fld.SubFolders
             DoEvents
             FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)
          Next
       End If
       Exit Function
    Catch:  FileName = ""
           Resume Next
    End Function
    					
  5. Execute o projecto e clique em Command1.
  6. Introduza o nome do directório e o nome do ficheiro a procurar. Repare que, quando cada ficheiro é encontrado, o respectivo nome é adicionado à caixa de listagem. Quando o processo estiver concluído, o número de ficheiros encontrado é apresentado numa caixa de mensagem. O tamanho total dos ficheiros também é apresentado.

Resolução de problemas

  • Alguns ficheiros e directórios, tais como Informações de Volume de Sistema no Microsoft Windows XP, podem causar uma violação de acesso se uma aplicação lhes tentar aceder. O código de processamento de erros pára de procurar num directório quando ocorre um problema. Tem de utilizar outra abordagem se necessitar de uma resolução mais robusta.
  • Se utilizar um filtro de ficheiro (tal como *.*), poderá ser devolvido um número de ficheiros muito grande. O controlo ListBox só pode conter um número limitado de caracteres. Quando esse limite é alcançado, não são adicionadas mais entradas à caixa de listagem.
  • Este código de exemplo foi testado utilizando a versão 5.6.0.6626 do Microsoft Scripting Runtime (Scrrun.dll). Se ocorrerem problemas, poderá ter de transferir uma versão mais recente deste ficheiro.

Referências

Para obter informações adicionais sobre outros métodos que poderá utilizar para localizar um ficheiro específico, clique no número de artigo existente abaixo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:
185476  (http://support.microsoft.com/kb/185476/ ) COMO: Pesquisar Directórios para Localizar ou Listar Ficheiros

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Palavras-chave: 
kbhowto kbhowtomaster KB185601