Melhor arquitetura para o tratamento de alterações de sistema de ficheiros?
-
09-06-2019 - |
Pergunta
Aqui é o cenário:
Eu estou escrevendo um aplicativo que vai assistir a quaisquer alterações em um diretório específico.Este diretório será inundado com milhares de arquivos de um minuto cada, com um "quase" GUID exclusivo.O formato de arquivo é este:
GUID.dat onde GUID == xxxxxxxxxxxxxxxxxxxxxxxxxxxxx (o conteúdo interno não são relevantes, mas é apenas de dados de texto)
Meu aplicativo será um formulário que possui uma única caixa de texto que mostra todos os arquivos que estão sendo adicionados e removidos em tempo real.Cada vez que um novo arquivo vem em eu ter para actualizar a caixa de texto com esse arquivo, MAS tenho que primeiro certifique-se de que este semi-GUID exclusivo é realmente único, se for, atualizar a caixa de texto com esse novo arquivo.
Quando um arquivo é removido do diretório, verifique se ele existe e, em seguida, excluí-lo, actualização de texto de acordo.
O problema é que estou usando .NET filewatcher e parece que existe um buffer interno que é soprado para cima cada vez que o (buffersize + 1)-ésimo arquivo vem em.Eu também tentei manter uma Lista interna no meu app, e basta adicionar todos os arquivos que vem, mas não a única-GUID verificar mais tarde, mas não há dados.
Solução
Um par de coisas que eu tenho na minha cabeça:
- Se o guid é não exclusivo, não substituir o arquivo com o mesmo nome, ou é a seleção com base em uma pesquisa que faz alguma ação externa (e.g.verifique o arquivo)?(i.é.esta é uma YAGNI momento?)
- Eu usei FileSystemWatcher antes com muito bom sucesso, você pode nos dar algumas ideias de como a como o seu realmente fazer as coisas?
- Quando você diz "não há dados" ao trabalhar com a sua lista personalizada, qual foi o problema?E como você foi verificar alterações de sistema de ficheiros sem FileSystemWatcher?!
Desculpe não responder, ainda, apenas gostaria de saber mais sobre o problema :)
Outras dicas
Eu sugiro que você dê uma olhada no SHChangeNotify Chamada de API, que pode notificá-lo de todos os tipos de shell de eventos.Para monitorar o arquivo de criação e exclusão de atividade, você pode querer prestar atenção especial para a SHCNE_CREATE e SHCNE_DELETE argumentos.