Posso mostrar o progresso da cópia de arquivos usando o FileInfo.CopyTo () no .NET?

Eu criei um utilitário de cópia em c # (.NET 2.0 Framework) que copia arquivos, diretórios e sub-diretórios recursivos etc. O programa tem uma GUI que mostra o arquivo atual sendo copiado, o número atual do arquivo (seqüência), o número total de arquivos a serem copiados e a porcentagem concluída para as operações de cópia. Há também uma barra de progresso, que é baseada no arquivo atual / total de arquivos.

Meu problema está relacionado a copiar arquivos grandes. Eu tenho sido incapaz de encontrar uma maneira de indicar o progresso total da cópia de um arquivo grande (usando minha estrutura de classe atual que utilitzes FileInfo.CopyTo método). Como solução alternativa, separei as operações de cópia de arquivos e a exibição da GUI em seus próprios threads e configurei uma sugestão visual para mostrar que o trabalho está sendo feito. Pelo menos o usuário está ciente de que o programa não está congelado e ainda está copiando arquivos.

Seria melhor poder mostrar o progresso com base no número total de bytes ou ter algum tipo de evento que seja acionado pelo método FileInfo.CopyTo que indica o número total de bytes copiados do arquivo atual.

Eu estou ciente da propriedade FileInfo.Length, então eu tenho certeza que há uma maneira MacGuyver meu próprio evento que é baseado nisso e ter um manipulador no lado da GUI de coisas lendo as atualizações (talvez com base na verificação do FileInfo. Comprimento propriedade do objeto de destino usando algum tipo de timer?).

Alguém sabe de uma maneira de fazer isso que eu estou negligenciando. Se eu puder evitá-lo, prefiro não reescrever minha classe para copiar bytes por meio de um fluxo e rastreá-lo dessa maneira (embora esteja pensando que posso estar preso a seguir esse caminho).

Desde já, obrigado

PS - Eu estou preso com a estrutura do .NET 2.0 por enquanto, então qualquer solução que requer recursos disponíveis em> = 3.0 só não é uma opção para mim.

PPS - Estou aberto a soluções em qualquer variedade de linguagem .NET, não apenas c #.

questionAnswers(7)

yourAnswerToTheQuestion