2012-01-17 11 views
0

頻繁に変更されるファイルでSHA1を計算する必要があります。私はコピー、貼り付け、Windowsエクスプローラでアーカイブを開くことができますが、using命令でUnauthorizedAccessExceptionが発生します。例外は、ファイルのプロパティには当てはまらない読み取り専用ファイルがあることを示しています。Windowsエクスプローラでペーストを開いたり、アーカイブを開くことはできますが、コードから読み取ることはできませんか?

アーカイブは、フルアクセス権を持つ場所の共有ドライブにあります。

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

あなたが例外に言及した場合、少なくともメッセージを含めてください。 – Reniuz

答えて

2

あなたがFileStreamのために使用されているコンストラクタは、明示的にファイル共有を指定していない、ので、何のファイル共有はデフォルトでは許可されません。ファイルが頻繁に変更されている場合は、コンストラクタの異なる形式を使用したほうが良いかもしれません:

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

注意あなたが処理している間、別のプロセスがファイルを変更した場合、その後、あなたのSHA1が正確ではないだろうということ。

+0

ニース、FileAccess.Readを追加してトリックをしました;) – Jerome

+0

+1アバターとしてパンダを持っているからです:p –

関連する問題