可以复制粘贴,在Windows资源管理器中打开存档但无法从代码中读取?

时间:2012-01-17 09:10:51

标签: c#

我需要在经常更改的文件上计算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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

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

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

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