我需要获取文件的前 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();
但它会读取整个文件。
最佳答案
您可以使用 TransformBlock
分块读取文件并将其分块提供给 MD5CryptoServiceProvider。 .这样,您就不必为缓冲区消耗 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")));
关于c# - 使用 C# 从文件中读取前 10MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019775/