有没有办法计算只读文件的校验和?
我见过的唯一例子是使用像这样的算法
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();
}
答案 0 :(得分:5)
即使是只读文件,也可以打开文件 如果不打开文件就无法生成校验和,因为如果不打开文件就无法读取文件。
您应该通过FileAccess.Read
以只读方式将其打开。
此外,您应该使用SHA512而不是MD5生成校验和。
答案 1 :(得分:3)
根据documentation,您正在使用的FileStream构造函数打开文件进行读/写。使用指定FileAccess.Read。
的重载构造函数被赋予读/写 访问该文件,它被打开 共享读取权限
答案 2 :(得分:1)
如果不读取整个文件,则无法生成校验和。
通常,只能打开只读文件。可能存在阻止给定用户打开文件的文件或文件夹权限。
答案 3 :(得分:0)
嗯,不。您必须阅读文件以对其中的内容执行任何操作。但是,当您希望FileStream(_filePath,FileAccess.Read,true,4096,true);
以只读方式打开时,您将使用通用访问权限打开。 StreamReader会自动执行此操作。