Je dois synchroniser des fichiers volumineux sur plusieurs machines. Les fichiers peuvent atteindre une taille de 6 Go. La synchronisation sera effectuée manuellement toutes les quelques semaines. Je ne peux pas prendre en compte le nom du fichier car il peut changer à tout moment.
Mon plan est de créer des sommes de contrôle sur le PC de destination et sur le PC source, puis de copier tous les fichiers avec une somme de contrôle, qui ne sont pas déjà dans la destination, vers la destination. Ma première tentative était quelque chose comme ceci :
using System.IO;
using System.Security.Cryptography;
private static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Le problème était le temps d'exécution :
- avec SHA256 avec un fichier de 1,6 GB -> 20 minutes
- avec MD5 avec un fichier de 1,6 GB -> 6.15 minutes
Existe-t-il un meilleur moyen - plus rapide - d'obtenir la somme de contrôle (peut-être avec une meilleure fonction de hachage) ?
2 votes
Faut-il vraiment vérifier la somme de contrôle ? Comment copiez-vous les fichiers ? Si vous êtes sous Windows, j'utiliserais la dernière version de Robocopy ...
6 votes
Une astuce intéressante pour ne s'occuper du hachage que si la taille des fichiers est différente entre deux fichiers candidats. stackoverflow.com/a/288756/74585