Em um ambiente isolado, estou usando um conversor de arquivo .EML para .MSG, ReliefJet Essentials , para converter um grande repositório de arquivos (na casa das centenas de milhares), mantendo intacta a estrutura de diretório - que começa com pastas para cada letra e vai mais profundo a partir daí.
O software de conversão não fornece um registro de cada arquivo concluído (felizmente), mas mantém um registro de erro de tudo o que falha, o que me dá alguma indicação do caminho que ele segue.
O que me confunde é não colocar as pastas em ordem alfabética. O log de erros relata que as pastas foram convertidas na ordem:
D, N, P, C, I, S, M, G, T, V, B, O, E, Q, A, U, R, F, L
Mesmo as subpastas quando aparecem nesta lista foram atendidas fora de ordem. Por exemplo, em B
, as pastas foram atendidas (truncadas para privacidade):
BLA, BD, BRE, BAL, BRA, BEL, BLU
Corrigi alguns arquivos problemáticos e executei a solicitação de conversão novamente, ignorando os arquivos existentes. O log retornou todos os erros exatamente na mesma ordem, o que me faz pensar que não é uma 'escolha aleatória', mas uma ordem definida.
O que eu estou querendo saber é como esse pedido é alcançado. Não parece ser baseado no tamanho da pasta ou no número de arquivos, como acontece com os dois valores:
N
É menor queD
L
tem quase o mesmo tamanho queD
P
é maior queN
eD
combinadoL
Existe algum método de classificação que explique por que o utilitário seleciona pastas nessa ordem não alfabética, que parece aleatória, mas é repetível e reproduzível?
Provavelmente é a ordem em que os arquivos e pastas foram encontrados no disco.
Digamos que você crie uma pasta no disco
Então, algum tempo depois, você cria outra pasta
Yes
Folder B
está alfabeticamente antes de J, mas foi criado depois.Uma lista de diretórios é apenas isso, uma lista das coisas no diretório, e é muito mais simples anexar itens a essa lista do que ler a lista inteira, classificá-la por algum algoritmo arbitrário e depois gravar a lista de volta no disco .
Em termos de adicionar itens a esse diretório, seria muito lento adicionar itens a esse diretório se você o classificasse todas as vezes; na verdade, você poderia prejudicar uma máquina fazendo o simples ato de adicionar uma tonelada de arquivos de zero byte a um diretório, mesmo que o nome do arquivo fosse sequencial, ele teria que verificar classificando-os a cada vez.
Até mesmo renomear um arquivo em um diretório grande pode ser dolorosamente lento, pois acionaria uma operação de classificação na pasta.
Então, em vez disso, um item é simplesmente anexado à lista a cada vez. Sem classificação, sem nada. Basta anexar e fechar.
Se você deseja uma lista classificada, pode digitalizar o diretório e classificar sua própria lista. Durante a vida útil desse diretório, pode ter sido mais rápido para os programas já estarem classificados, mas esse problema é menor em comparação com o impacto no desempenho obtido ao fazê-lo toda vez que um arquivo é gravado ou renomeado.
Portanto, o que você provavelmente está vendo é a ordem em que os diretórios ou arquivos foram adicionados ao seu diretório, em vez de uma lista classificada.
Seu programa não se preocupa com "gerenciamento de arquivos". Tudo o que importa é o conteúdo desses arquivos e garantir que ele seja executado na lista.
É aleatório, mas ao mesmo tempo é repetível porque essa é a ordem em que os nomes são gravados na lista de pastas.
Parece aleatório, mas realmente não é .