none
Listar todos diretorios e arquivos RRS feed

  • Pergunta

  • Pessoal, alguem sabe como faço para listar todos os arquivos de uma unidade com o path completo e tamanho dele?

    grato,


    Fabiano Pires
    terça-feira, 10 de fevereiro de 2009 18:15

Respostas

  • Fabiano.

    Para você listar todos os subdiretórios, você precisa fazer uma função recursiva, onde vc inicialmente vai passar o diretório que você deseja consultar.

    Ex:

    Public Sub BuscaRecursivaDiretorios(ByVal caminho As String)        
       Dim objDir As New DirectoryInfo(caminho)        
       For Each objSubDir As DirectoryInfo In objDir.GetDirectories()        
          BuscaRecursivaDiretorios(objSubDir.FullName)        
       Next       
           
       For Each objFile As FileInfo In objDir.GetFiles()        
          Console.WriteLine(objFile.FullName)        
       Next       
    End Sub      
        
    'Lista todos os arquivos do diretório C:\      
    BuscaRecursivaDiretorios("C:\")     
        
    'Lista todos os arquivos do diretório C:\WINDOWS     
    BuscaRecursivaDiretorios("C:\WINDOWS\")   
     

    Espero ter ajudado.
    • Marcado como Resposta Fabiano Pires terça-feira, 10 de fevereiro de 2009 18:58
    terça-feira, 10 de fevereiro de 2009 18:53

Todas as Respostas

  •  Olá Fabiano. Tudo bem?

    Para retornar o tamanho do disco, você pode utilizar o seguinte método:

    Imports System.IO  
     
    Dim objDrive As New DriveInfo("C:")  
    Console.WriteLine(objDrive.TotalSize.ToString()) 

    Agora para listar todos os arquivos, você precisa utilizar as classes FileInfo e DirectoryInfo. Para obter todos os arquivos de um determinado diretório, você faz:

    Imports System.IO  
     
    Dim objDir As New DirectoryInfo("C:\")  
     
    For Each objFile As FileInfo In objDir.GetFiles()  
       Console.WriteLine(objFile.FullName)  
    Next 
     

    O código acima só vai listar os arquivos do diretório "C:\". Sem acessar os subdiretórios.

    Se você quiser verificar também os subdiretórios, você precisa fazer uma função recursiva que recebe o diretório a ser pesquisado. Então você lista os diretórios que estão contidos no diretório informado e chama a função recursiva para cada diretório retornado. Quando não houver mais diretórios para listar, então você lista os arquivos contidos em cada diretório.

    Para retornar a lista de diretórios, utilize o método GetDirectories() do objeto DirectoryInfo. Ele vai te retornar um array de DirectoryInfo.

    Espero ter ajudado.
    • Sugerido como Resposta Rafael Cabral terça-feira, 10 de fevereiro de 2009 19:01
    terça-feira, 10 de fevereiro de 2009 18:36
  • Até essa etapa ok, mas preciso exibir todos os subdiretorios tambem, sabe como posso fazer?


    Gostaria de montar a seguinte estrutura pois irei gravar em banco de dados.

    Path                                        NomeArquivo            Tamanho kb
    C:\Temp\dir01\                        teste.txt                    10
    C:\Temp\dir02\                        teste.txt                    10
    C:\Temp\dir02\subdir01\         teste3.txt                  10



    grato,


    Fabiano Pires
    terça-feira, 10 de fevereiro de 2009 18:43
  • Fabiano.

    Para você listar todos os subdiretórios, você precisa fazer uma função recursiva, onde vc inicialmente vai passar o diretório que você deseja consultar.

    Ex:

    Public Sub BuscaRecursivaDiretorios(ByVal caminho As String)        
       Dim objDir As New DirectoryInfo(caminho)        
       For Each objSubDir As DirectoryInfo In objDir.GetDirectories()        
          BuscaRecursivaDiretorios(objSubDir.FullName)        
       Next       
           
       For Each objFile As FileInfo In objDir.GetFiles()        
          Console.WriteLine(objFile.FullName)        
       Next       
    End Sub      
        
    'Lista todos os arquivos do diretório C:\      
    BuscaRecursivaDiretorios("C:\")     
        
    'Lista todos os arquivos do diretório C:\WINDOWS     
    BuscaRecursivaDiretorios("C:\WINDOWS\")   
     

    Espero ter ajudado.
    • Marcado como Resposta Fabiano Pires terça-feira, 10 de fevereiro de 2009 18:58
    terça-feira, 10 de fevereiro de 2009 18:53
  • obrigado, isso mesmo que eu precisava.

    agora me viro para fazer o resto.

    att,

    Fabiano Pires
    terça-feira, 10 de fevereiro de 2009 18:58
  • Vi uma coisa interessante no VB 2005.

    Vc pode chamar o método GetDiretories passando um parâmetro onde não é necessário criar uma função recursiva.

    objDir.GetDirectories("*", SearchOption.AllDirectories) 

    Só que se vc utilizar o método desta forma, pode ser que dê erro ao acessar alguns diretórios inacessíveis do File System como o C:\System Volume Information, onde dará um exception. É melhor vc fazer da outra forma pq vc consegue tratar esses inconvenientes.

    Espero ter ajudado.
    terça-feira, 10 de fevereiro de 2009 19:00