public static string Calculate_Hash(string fileName)
{
long read = 0;
var r = -1;
const long bytesToRead = 100 * 1024 * 1024;
const int bufferSize = 4096;
var buffer = new byte[bufferSize];
var sha = new SHA256Managed();
using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
while (read <= bytesToRead && r != 0)
{
read += (r = stream.Read(buffer, 0, bufferSize));
sha.TransformBlock(buffer, 0, r, null, 0);
}
}
sha.TransformFinalBlock(buffer, 0, 0);
return string.Join("", sha.Hash.Select(x => x.ToString("x2")));
}