Pergunta

Faz o NSFileManager método contentsEqualAtPath:andPath: Crie uma soma de verificação dinâmica para comparar dois arquivos, ele abre o cabeçalho do arquivo e compara os detalhes do cabeçalho do arquivo ou usa algum outro método para comparar?

Eu tenho uma lista de 200.000 arquivos para comparar onde os arquivos locais devem ser comparados com os arquivos em um volume do servidor remoto. Os arquivos locais teriam sido copiados do volume do servidor remoto em algum momento do passado, e eu estarei andando pela lista de arquivos para comparar cada um e depois copiar qualquer arquivo mais recente do volume do servidor remoto para a máquina local (substituindo qualquer qualquer existir). Não há garantia de que os arquivos de servidor remoto tenham sido criados pelo usuário local (e mais do que provável que eles não tenham sido).

Como os arquivos são pequenos (aproximadamente 4k de tamanho), uma operação de comparação de arquivo complexa pode levar quase o tempo em que uma operação de cópia.

Essa operação pode (concebivelmente, mas não provável) acontecer várias vezes em uma sessão de usuário, por isso preciso garantir que esteja usando o método mais eficiente para verificar.

A operação em si será executada em um encadeamento separado, para que eu não tenha problemas para amarrar o usuário enquanto a operação é concluída.

Comecei a implementação para testar isso, mas estava interessado em ver se mais alguém teve alguma experiência comparando milhares de arquivos rapidamente, a fim de determinar quais arquivos precisam ser atualizados se existir um mais novo. E se você tiver, você tem alguma dica ou armadilhas para evitar?

Qualquer conselho muito apreciado.

Atualizar

Pensando mais sobre isso, pode ser mais benéfico manter um arquivo que rastreia o último registro de data e hora atualizado de qualquer imagens alteradas e manter um arquivo local que faça o mesmo e apenas compare esses dois documentos ... atualizará mais à medida que progride.

Foi útil?

Solução

Parece -me que, para os diretórios, apenas nomes de arquivos (e nomes de arquivos dos subdiretos) são comparados. Ele compara apenas o conteúdo do arquivo se você passar explicitamente caminhos de arquivo para o método.

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