可以在Windows资源管理器中复制粘贴、打开存档,但可以';t读取代码
本文关键字:但可以 取代码 读取 资源管理器 Windows 复制 | 更新日期: 2023-09-27 18:20:43
我需要在经常更改的文件上计算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();
}
}
}
}
用于FileStream
的构造函数没有明确指定文件共享,因此默认情况下不允许文件共享。如果文件经常被修改,那么您最好使用不同形式的构造函数:
using (fs = new FileStream(@"###.xml.gz", FileMode.Open,
FileAccess.Read, FileShare.ReadWrite)
{
// ... your code here
}
请注意,如果另一个进程在您处理时修改了文件,那么您的SHA1将不准确。