使用c#从文件中读取前10MB

Cfa*_*iak 4 c# md5 filestream

我需要获取文件的前10mb并从中计算md5,我该如何实现?我找不到任何文件读取样本.我有这样的事情:

FileStream file = new FileStream(fileName, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();

StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
     sb.Append(retVal[i].ToString("x2"));
}
var md5Final = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

但它读取整个文件.

dri*_*iis 8

您可以使用块以块的形式读取文件并将其以块的形式提供给MD5CryptoServiceProvider TransformBlock.这样,您不必为缓冲区消耗10 MB的内存.例:

long read = 0;
int r = -1; 
const long bytesToRead = 10 * 1024 * 1024;
const int bufferSize = 10*1024;
byte[] buffer = new byte[bufferSize];
MD5 md5 = new MD5CryptoServiceProvider();
using(var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read) )
{
    while(read <= bytesToRead && r != 0) 
    {
        read += (r = stream.Read(buffer, 0, bufferSize));
        md5.TransformBlock(buffer, 0, r, null, 0);
    }
}
md5.TransformFinalBlock(buffer, 0,0);
string md5Final = String.Join("", md5.Hash.Select(x => x.ToString("x2")));
Run Code Online (Sandbox Code Playgroud)