C# 在不打开文件的情况下生成校验和
有没有办法计算只读文件的校验和 我见过的唯一的例子使用这样的算法C# 在不打开文件的情况下生成校验和,c#,cryptography,C#,Cryptography,有没有办法计算只读文件的校验和 我见过的唯一的例子使用这样的算法 public string GetChecksum() { FileStream file = new FileStream(_filePath, FileMode.Open); MD5 md5 = new MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(file); file.Close(); StringBuild
public string GetChecksum()
{
FileStream file = new FileStream(_filePath, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
foreach (byte t in retVal)
{
sb.Append(retVal[1].ToString("x2"));
}
return sb.ToString();
}
即使文件是只读的,也可以打开它。
不打开文件就无法生成校验和,因为不打开文件就无法读取文件 您应该通过
FileAccess.Read
以只读方式打开它
此外,应该使用SHA512而不是MD5生成校验和。如果不读取整个文件,则无法生成校验和 通常,可以打开只读文件。可能存在阻止给定用户打开文件的文件或文件夹权限。根据,您正在使用的FileStream构造函数将打开文件进行读/写操作。使用指定FileAccess.Read的重载 构造函数被赋予读/写权限 访问该文件,并将其打开 共享读访问
不,你必须读一个文件才能对里面的东西做任何事情。但是当您可能想要
FileStream(_filePath,FileAccess.Read,true,4096,true)时,您使用的是通用访问
以只读方式打开它。StreamReader将自动执行此操作。Readonly并不意味着您无法打开它。不确定问题是什么?呃。。。由于只需读取文件即可计算校验和只读,这正是您想要的。具体而言,构造函数调用应该是newfilestream(\u filePath,FileMode.Open,FileAccess.read)
。请参见这里的一个示例,说明为什么MD5不适用于文件校验和:他还应该在该文件流上使用using
子句,考虑使用“代码>文件.OpenRead())/Cux>方法显式,而不是<代码>新FielestRAME()/<代码>构造函数。