Düzenleme: Kodun beklendiği gibi çalıştığından bunu bir örneğe aldım.C# MD5 hasher örneği
Bir dosyayı kopyalamaya çalışıyorum, bir MD5 hash olsun, sonra da kopyayı silin. Başka bir uygulamanın yazdığı orijinal dosyada işlem kilitlerini önlemek için bunu yapıyorum. Ancak, kopyaladığım dosyada bir kilit alıyorum.
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);
Sonra 'bir File.Delete()
üzerinde istisna 'süreç dosyası erişemiyor' alıyorum.
using
deyimiyle, filestream güzelce kapatılmış olur. Ayrıca filestream'i ayrı ayrı ilan etmeyi, using
'u kaldırmayı ve okunduktan sonra fs.Close()
ve fs.Dispose()
'u koymayı denedim.
Bundan sonra, aslında md5 hesaplamasını ve kod silinmesini, dosyanın silinmesiyle yorumladım, bu yüzden ComputeHash(fs)
ile ilgili bir şey gibi görünüyor.
Neden sadece ReadAllBytes() yöntemini çağırıyor ve bununla bitmiyor? – BobbyShaftoe
ComputeHash çağrısı bir akışta çalışır, çünkü dosya büyükse, bellekte kalması gerekmez. –
Dosyayı silmeden önce kapatmak zorunda değil misiniz? – JonnyBoats