편집 : 코드 예기치 않은대로 예제를 retitled했습니다.C# MD5 hasher 예
파일을 복사하고 MD5 해시를 가져온 다음 복사본을 삭제하려고합니다. 나는 다른 응용 프로그램이 쓰는 원본 파일의 프로세스 잠금을 피하기 위해이 작업을 수행하고 있습니다. 그러나 복사 한 파일을 잠근다.
File.Copy(pathSrc, pathDest, true);
String md5Result;
StringBuilder sb = new StringBuilder();
MD5 md5Hasher = MD5.Create();
using (FileStream fs = File.OpenRead(pathDest))
{
foreach(Byte b in md5Hasher.ComputeHash(fs))
sb.Append(b.ToString("x2").ToLower());
}
md5Result = sb.ToString();
File.Delete(pathDest);
은 그때 '는 File.Delete()
에 예외'프로세스가 파일을 액세스 할 수 없습니다 '얻고있다.
using
문을 사용하면 filestream이 제대로 종료 될 것으로 예상됩니다. 나는 또한 using
을 제거하고 읽은 후에 fs.Close()
과 fs.Dispose()
을 넣고 별도로 파일 스트림을 선언하려고 시도했다.
이 후, 나는 실제로 md5 계산을 주석 처리하고, 코드는 삭제되고 파일과 함께 실행되므로 ComputeHash(fs)
과 관련이있는 것처럼 보입니다.
왜 그냥 ReadAllBytes()를 호출하고 끝내지 않으시겠습니까? – BobbyShaftoe
computeHash에 대한 그의 호출은 스트림에서 작동하기 때문에 파일이 크면 메모리에 전체를 저장할 필요가 없습니다. –
파일을 삭제하기 전에 파일을 닫지 않아도됩니까? – JonnyBoats