Jump to content
  • 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

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other sites
malainhocf

Olá, sim, tem que ser porque não se sabe quantos arquivos vão ser encontrados

Por isso tem que ser um array sem dimensão

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
Gooden

Redim Preserve arrayexe(idx)
arrayexe(idx) = File
idx = idx + 1

exatamente como o Ribeiro Disse

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
Gooden

usa uma list(of String)

TIpo

Dim p as new List(of String)
p.add("X")
p.add("2")

mais simples não»?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.