Pergunta

Existe uma maneira (no Windows usando Delphi 2010) para obter o número de arquivos em um dirctory sem realmente atravessando todos os arquivos?

Eu quero implementar uma barra de progresso durante alguma operação do sistema de arquivos de indexação. Por essa razão, eu preciso saber quantos arquivos estão no diretório.

O que é a maneira mais rápida para obter o número de arquivos em um diretório?

Foi útil?

Solução

Eu acho que a maneira mais rápida é usar o método TDirectory.GetFiles localizado na IOutils.pas. Como o número de arquivos (visíveis) em um diretório pode ser diferente para cada usuário, há apenas uma pequena chance de que há apenas um número para recuperar de alguma forma.

A abordagem FindFirst / FindNext (que é envolvido no método acima) não realmente arquivos transversais, só atravessa entradas em uma tabela, por isso pode ser mais rápido do que o esperado.

Outras dicas

Se você estiver executando o Windows 7 ou Server 2008 R2, eu recomendo extrair as funções FindFirst e FindMatchingFile de SysUtils e hacking o ex usar FindFirstFileEx vez de FindFirstFile. Depois, você pode definir os sinalizadores adicionais parâmetro para 2 (definidos no MSDN como FIND_FIRST_EX_LARGE_FETCH) com essa configuração condicionando a (Win32majorversion = 6) e (Win32minorversion> = 1), por enquanto.

Esta configuração produz um aumento muito significativo de velocidade para loops FindFirst / FindNext sobre estes OS. Procure FindFirstFileEx no MSDN para obter mais detalhes, como a documentação mais recente não está na documentação Microsoft recuperados pela Delphi ajuda.

TDirectory.GetFiles finalmente parece chamar FindFirst, por isso não vai comprar-lhe muita vantagem que não seja simplificando seu próprio código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top