ID do artigo: 185601 - Última revisão: terça-feira, 13 de maio de 2003 - Revisão: 2.0

COMO: Procurar 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 | Recolher tudo

Sumário

Este artigo passo a passo demonstra como usar a classe FileSystemObject para pastas de pesquisa recursivamente e localizar arquivos específicos.

Informações sobre a classe FileSystemObject

A classe FileSystemObject está localizada na Microsoft Scripting Runtime (Scrrun.dll). Para obter o ficheiro Scrrun.dll, instale qualquer uma das seguintes pacotes:
  • Microsoft Windows Script Host
  • Microsoft Windows NT Option Pack
  • Microsoft Internet Information Server 3.0
  • Script de atualização 3.1
  • Microsoft Visual Studio 98
  • Microsoft Visual Basic 6.0
A classe FileSystemObject fornece um melhor desempenho que se você usar funções intrínsecas como Dir e GetAttr do Visual Basic. Além disso, o FileSystemObject é muito mais simples de implementar que as funções intrínsecas do Visual Basic.

Criar o exemplo

  1. Crie um novo projeto Standard EXE no Visual Basic. Por padrão, é criado o Form1.
  2. No menu Project , clique em referências e, em seguida, adicione uma referência para o Microsoft Scripting Runtime. Se esta opção não estiver listada, localize o arquivo Scrrun.dll no seu sistema. Se você tiver a, instale uma das ferramentas listadas na seção Information About the FileSystemObject Class.
  3. Adicione um controle ListBox , um rótulo e um CommandButton ao Form1. Ajuste a largura do controle Label para que ele seja o mesmo que a largura do formulário.
  4. Adicione o seguinte código na seçã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 projeto e, em seguida, clique em Command1 .
  6. Digite o diretório e o nome de arquivo para procurar. Observe que, quando cada arquivo é encontrado, o nome do arquivo é adicionado à caixa de listagem. Quando o processo for concluído, o número de arquivos que são encontrados é exibido em uma caixa de mensagem. O tamanho total dos arquivos também é exibido.

Solução de problemas

  • Alguns arquivos e diretórios, como informações de volume do sistema no Microsoft Windows XP, causar uma violação de acesso se um aplicativo tenta acessá-los. O código de tratamento de erro pára de procurar um diretório quando ocorre um problema. Você deve usar uma abordagem diferente se você deve ter uma solução mais robusta.
  • Se você usar um filtro de arquivo (como *. *), um grande número de arquivos pode ser retornado. O controle ListBox só pode conter um número limitado de caracteres. Quando esse limite é alcançado, há mais entradas são adicionadas à caixa de listagem.
  • Este exemplo de código foi testado usando a versão 5.6.0.6626 do Microsoft Scripting Runtime (Scrrun.dll). Se ocorrerem problemas, talvez seja necessário baixar uma versão mais recente deste arquivo.

Referências

Para obter informações adicionais sobre outros métodos que você pode usar para localizar um arquivo específico, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
185476  (http://support.microsoft.com/kb/185476/EN-US/ ) COMO: Procurar 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 Enterprise Edition for Windows 6.0
  • 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: 
kbmt kbhowto kbhowtomaster KB185601 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 185601  (http://support.microsoft.com/kb/185601/en-us/ )