Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Pegar em todos os ficheiros *.exe que estão dentro de uma pasta e subpastas

Mensagens Recomendadas

malainhocf

Olá, boa noite,

Como faço para pegar em todos os ficheiros *.exe que estão numa pasta e subpastas dessa mesma pasta e armazenar todos os ficheiros num array ?

Imagine-se que eu digo ao programa que é a pasta c:\arquivos\

Tem que procurar arquivos *.exe dentro da pasta c:\arquivos\ e todas as subpastas e todas as subpastas. isto é, tudo o que estiver dentro de c:\arquivos\

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Descobri uma função no forum que me pode ajudar

Adaptei a função para adicionar os arquivos com os respectivos caminhos ao array

Mas estou a obter um erro

...

Private idx As Integer = 0

Private arrayexe() As String

Sub ListFiles(ByVal strRootPath As String, ByVal filePattern As String)
        Try
            Dim FullDir() As String = IO.Directory.GetDirectories(strRootPath)
            For Each Dir As String In FullDir

                Try
                    Dim FullFiles() As String = IO.Directory.GetFiles(Dir, filePattern, IO.SearchOption.AllDirectories)
                    For Each File As String In FullFiles

                        Try

                            ' Mostra qual é o ficheiro
                            arrayexe(idx) = File
                            idx = idx + 1


                        Catch ex As Exception
                        End Try
                    Next

                Catch ex As Exception
                End Try
            Next

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

    End Sub


ListFiles("C:\", "*.exe")

MsgBox(arrayexe(9))

...

Mas estou a obter um erro

A referência de objecto não foi definida como uma instância de um objecto.

O que se passará ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Inicializaste o array, sim, mas sem tamanho definido.

Exprimenta, antes de "arrayexe(idx)", meter:

Redim Preserve arrayexe(idx)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Na declaração, diz que é um array de tamanho 1:  arrayexe(0) e tenta de novo.

Só se não for daí. Sinceramente vi pouco mais do código. Experimenta isso primeiro.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Só não dá erro se eu definir o tamanho do array

Senão dá erro

Depois fiz um msgbox(arrayexe(0))

E não mostra arquivo nenhum

Mas penso que 1º é preciso acertar o array

Depois vê-se o caso do file

O que devo fazer ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Acabo de descobrir que a função não está a funcionar bem

Dai o problema com o array

em vez de preencher o array fiz um msgbox(file) e não apareceu nenhuma box

Por isso a função não está a funcionar bem


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Agora que meto o olho a isso, obténs o mesmo resultado apenas com isto:

        For Each Fich As String In FileIO.FileSystem.GetFiles("c:\", FileIO.SearchOption.SearchAllSubDirectories, "*.exe")
            MsgBox(Fich)
        Next

Demora algum tempo pois como deves calcular está a fuçar-te o disco todo.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Muito obrigado, funcionou quase a 100%

Porque algumas pastas dá acesso negado

Como poderia fazer para ir para a pasta ou subpasta seguinte ?

Mas está muito próximo da perfeição

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Nesse caso já terás de listar directórios também, como estavas a fazer.

Explora os métodos da FileIO.FileSystem.

O GetDirectories não se atrapalha com permissões, desde que não dês como caminho de entrada uma pasta com permissões.

Pouco mais complicado fica.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

E se eu pretendesse que ele varresse os discos todos a procura dos ficheiros com a estenção pretendida ?

Como ficaria ?

Eu quero pegar os arquivos todos de todos os discos, sejam internos, externos, penes, tudo.


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

Tens de percorrer todas as drives: DriveInfo.GetDrives e combinar com o que o ribeiro55 disse com o GetDirectories


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Algém me ajuda a alterar o seguinte código para que pesquise em todas as drives, que ignone as pastas ou subpastas que sejam de acesso negado e passar para a pasta ou subpasta seguinte ?

O código que eu tenho é o seguinte

For Each Fich As String In FileIO.FileSystem.GetFiles("c:\", FileIO.SearchOption.SearchAllSubDirectories, "*.exe")
            ReDim Preserve arrayexe(idx)
            arrayexe(idx) = Fich
            idx = idx + 1
        Next

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.