我需要在经常更改的文件上计算SHA1。我可以在Windows资源管理器中复制,粘贴,打开存档,但是我在using
指令上得到了一个UnauthorizedAccessException。例外情况表明我有一个只读文件,在属性中似乎不是真的文件。
存档位于我可以完全访问的位置的共享驱动器上。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace TheTest
{
public class MakeSha1
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream(@"###.xml.gz", FileMode.Open))
{
using (SHA1Managed sha1 = new SHA1Managed())
{
byte[] hash = sha1.ComputeHash(fs);
StringBuilder formatted = new StringBuilder(hash.Length);
foreach (byte b in hash)
{
formatted.AppendFormat("{0:X2}", b);
}
Console.WriteLine(formatted.ToString());
}
Console.ReadKey();
}
}
}
}
答案 0 :(得分:2)
您用于FileStream
的构造函数未明确指定文件共享,因此默认情况下不允许文件共享。如果经常修改文件,那么最好使用不同形式的构造函数:
using (fs = new FileStream(@"###.xml.gz", FileMode.Open,
FileAccess.Read, FileShare.ReadWrite)
{
// ... your code here
}
请注意,如果另一个进程在您处理时修改了该文件,那么您的SHA1将不准确。