none
Lista completa de arquivos e subpastas RRS feed

  • Pergunta

  • Olá

    Eu preciso através de um openfiledialog obter uma relação de arquivos, pastas e subpasta completo.

    Ex.: C:\Program Files\file.exe

    Consegui parte utilizando:

                ListView1.Items.Clear()
                Dim file As String
                For Each file In OpenFileDialog1.FileNames
                    ListView1.Items.Add(file)
                Next

    No entanto nao adiciona pastas nem arquivos das subpastas.

    Eu preciso disso pois vou comprimir os arquivos, e quando executado extraí-los para uma pasta temporária e executar.

    Alguém tem uma ideia?

    Desde já agradeço.

    quarta-feira, 20 de abril de 2016 17:20

Respostas

  • Oi.

    Diretórios são estruturados como árvores; por que não usar o componente TreeView? Ele serve para ver árvores.

    Usando uma árvore, dá pra populá-la usando recursão:

        Private Sub LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView(ByVal diretorio As String, ByVal noPai As TreeNode)
    	Dim dirsFilhos() As String = System.IO.Directory.GetDirectories(diretorio)
    	If dirsFilhos.Length = 0 Then
    	    Return
    	Else
    	    For Each dirFilho In dirsFilhos
    		Dim noFilho As TreeNode = New TreeNode(dirFilho)
    		noPai.Nodes.Add(noFilho)
    		For Each arquivo In System.IO.Directory.GetFiles(dirFilho)
    		    noFilho.Nodes.Add(arquivo)
    		Next
    		LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView(dirFilho, noFilho)
    	    Next
    	End If
        End Sub

    Então chame a função com o diretório e nó raíz:

    TreeView1.Nodes.Add(New TreeNode("D:\\"))
    LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView("D:\\", TreeView1.Nodes(0))
    

    Isso lê todos os arquivos e sub-diretórios do diretório raíz e arquivos e sub-diretórios de cada sub-diretório abaixo.

    Utilize o componente FolderBrowserDialog em vez de OpenFileDialog; esse último serve para escolher arquivos, não diretórios.

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de abril de 2016 13:50
    quarta-feira, 20 de abril de 2016 18:48

Todas as Respostas

  • Oi.

    Diretórios são estruturados como árvores; por que não usar o componente TreeView? Ele serve para ver árvores.

    Usando uma árvore, dá pra populá-la usando recursão:

        Private Sub LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView(ByVal diretorio As String, ByVal noPai As TreeNode)
    	Dim dirsFilhos() As String = System.IO.Directory.GetDirectories(diretorio)
    	If dirsFilhos.Length = 0 Then
    	    Return
    	Else
    	    For Each dirFilho In dirsFilhos
    		Dim noFilho As TreeNode = New TreeNode(dirFilho)
    		noPai.Nodes.Add(noFilho)
    		For Each arquivo In System.IO.Directory.GetFiles(dirFilho)
    		    noFilho.Nodes.Add(arquivo)
    		Next
    		LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView(dirFilho, noFilho)
    	    Next
    	End If
        End Sub

    Então chame a função com o diretório e nó raíz:

    TreeView1.Nodes.Add(New TreeNode("D:\\"))
    LerDiretoriosEArquivosRecursivamenteEAdicionarAaTreeView("D:\\", TreeView1.Nodes(0))
    

    Isso lê todos os arquivos e sub-diretórios do diretório raíz e arquivos e sub-diretórios de cada sub-diretório abaixo.

    Utilize o componente FolderBrowserDialog em vez de OpenFileDialog; esse último serve para escolher arquivos, não diretórios.

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de abril de 2016 13:50
    quarta-feira, 20 de abril de 2016 18:48

  • Bom dia,

    Por falta de retorno, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma nova thread.

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 27 de abril de 2016 13:51