Ich muss große Dateien auf einigen Computern synchronisieren. Die Dateien können bis zu 6 GB groß sein. Die Synchronisierung erfolgt alle paar Wochen manuell. Ich kann den Dateinamen nicht berücksichtigen, da sie sich jederzeit ändern können.
Mein Plan ist es, Prüfsummen auf dem Ziel-PC und auf dem Quell-PC zu erstellen und dann alle Dateien mit einer Prüfsumme, die sich noch nicht im Ziel befinden, auf das Ziel zu kopieren. Mein erster Versuch war ungefähr so:
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);
}
}
Das Problem war die Laufzeit:
- mit SHA256 mit einer 1,6-GB-Datei -> 20 Minuten
- mit MD5 mit einer 1,6-GB-Datei -> 6,15 Minuten
Gibt es einen besseren - schnelleren - Weg, um die Prüfsumme zu erhalten (möglicherweise mit einer besseren Hash-Funktion)?