2017-01-17 7 views
1

주어진 파일에 대해 MD5 및 SHA1 체크섬을 계산하는 메서드를 실행하는 동안 문제가 있습니다. 내 방법은 다음과 같이 :
SHA1을 :MD5 및 SHA1 체크섬을 계산하는 동안 IOException이 발생했습니다.

public string HashFile(string toHash) 
    { 
     SHA1 SHA1ENGINE = SHA1.Create(); 
     byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read)); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hashBytes.Length; i++) 
     { 
      sb.Append(hashBytes[i].ToString("X2")); 
     } 
     return sb.ToString(); 
    } 


MD5 : 프로세스가 파일을 액세스 할 수 없습니다 '(:

public string HashFile(string toHash) 
    { 
     MD5 MD5ENGINE = MD5.Create(); 
     byte[] hashBytes = MD5ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read)); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hashBytes.Length; i++) 
     { 
      sb.Append(hashBytes[i].ToString("X2")); 
     } 
     return sb.ToString(); 
    } 


다음 방법 중 하나를 실행하는 동안 나는 IOException를 얻을 PATHTOFILE) '이 다른 프로세스에서 사용되고 있기 때문입니다.
이 문제는 계속 발생하며 내 PC의 파일에 대한 체크섬을 계산할 수 없습니다. 로컬 관리자로 로그인하고 VS가 관리자로 열립니다. 이것은 내가 시도한 모든 디렉토리 (예 : C : \ TEMP, C : \ Users \ Administrator \ Desktop)에서 지속됩니다. 또한 실제로 파일을 잠그는 프로세스가있을 수 있기 때문에 PC를 재부팅하려고 시도했지만 도움이되지 않았습니다.

은 처음에는 사용하려했습니다

byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read)); 

이것은 또한 도움이되지 않았다 :

byte[] hashBytes = SHA1ENGINE.ComputeHash(File.OpenRead(toHash)); 

그러나 기술 문제와 I가 있음을 변경 한 일부 조사가 발생한 후

.

+0

'File.Open()'은 처리해야 할 것을 반환합니다. – CodeCaster

+0

file.open에 using 문을 사용해야합니다. https://msdn.microsoft.com/en-us/library/b9skfh7s(v=vs.110).aspx – JOSEFtw

답변

6

파일을 닫지 않고 여는 중입니다. 그냥 당신이 using 문을 닫을 수 있도록 별도 스트림을 엽니 다

MD5 md5 = MD5.Create(); 
using (var stream = File.Open(...)) 
{ 
    var hash = md5.ComputeHash(stream); 
    // ... 
} 

(나는 또한 중복을 피하기 위해 코드를 "16 진수로 변환"밖으로 분리 좋을 것 당신은 심지어 파일 이름을 복용하는 방법이있을 수 있습니다. 그리고 HashAlgorithm가) ... 더욱 중복을 피하기 위해

피할 수

당신의 코드 코드) 동일한 프로세스를 포함하여 다른 파일 스트림을 (개방을 방지 열린 파일 스트림을 들고 ...하지만 도움이되지 않습니다 현재 다른 곳에서 열려있는 모든 파리를 위해. 파일을 열어 읽을 수 없으면 해시를 계산할 수 없습니다.

+0

'using' 문이 실제로 도움이되었지만 전적으로 도움이되지 않았습니다. 나는 아직도 몇몇 파일에 갇혀있다. –

+0

@PiotrTruszkowski : 아마도 다른 응용 프로그램에서 * 해당 파일 *이 열려 있습니까? 단순히 파일을 열 수 없다면 할 수있는 일은 많지 않습니다 ... –

+0

감사합니다. 파일을 _locked_로 표시하고 트릭을해야합니다. –