可以在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();
            }
        }
    }
}

可以在Windows资源管理器中复制粘贴、打开存档,但可以';t读取代码

用于FileStream的构造函数没有明确指定文件共享,因此默认情况下不允许文件共享。如果文件经常被修改,那么您最好使用不同形式的构造函数:

using (fs = new FileStream(@"###.xml.gz", FileMode.Open, 
                           FileAccess.Read, FileShare.ReadWrite)
{
    // ... your code here
}

请注意,如果另一个进程在您处理时修改了文件,那么您的SHA1将不准确。

相关文章: