C# içindeki bir dosyanın İçeriğinin Hash'unu hesaplamam gerekiyor mu? Böylece, uygulamamdaki iki dosya karmaşasını karşılaştırabilirim. Aradım ama bulunamadı.C# İçinde Dosya İçerikleri Hash'i hesaplayın?
cevap
Metin tabanlı dosyaları yanı sıra ikili dosyaları ile çalışacak MD5CryptoServiceProvider
, kullanabilirsiniz.
byte[] myFileData = File.ReadAllBytes(myFileName);
byte[] myHash = MD5.Create().ComputeHash(myFileData);
Veya ... Büyük dosyalar ile çalışmak ve belleğe tüm dosyayı yüklemek istemiyorsanız: Sen Enumerable.SequenceEqual
iki dosyalarından bayt dizileri için karşılaştırabilirsiniz
byte[] myHash;
using (var md5 = MD5.Create())
using (var stream = File.OpenRead(myFileName))
myHash = md5.ComputeHash(stream);
:
myHash1.SequenceEqual(myHash2);
Ayrıca bir CRC hesap makinesi oluşturmayı da deneyebilirsiniz. Bkz: http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net
Daha iyi arama gerektiğini ;)
using System.IO;
using System.Text;
using System.Security.Cryptography;
protected string GetMD5HashFromFile(string fileName)
{
FileStream file = new FileStream(fileName, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
böyle bu işlev için dosyanızı geçirin.
GetMD5HashFromFile("text1.txt");
GetMD5HashFromFile("text2.txt");
Tam bayt dizisini bir dizgeye dönüştürmek gerçekten gerekli değil mi? İki karmaşayı karşılaştırmak için biraz fazla çalışıyorum. –
Açıkça 'Close()' çağırmak yerine, akışta 'using' kullanmalısınız. – svick
- 1. görünümü içerikleri
- 2. C++ içinde bir dosya okunamıyor
- 3. C# içinde dosya kopyalama nasıl C#
- 4. hesaplayın Ben Filepath
- 5. C++ 'da bir dizenin MD5 değerini hesaplayın
- 6. OpenCV içinde ROI içindeki nesne alanını hesaplayın
- 7. Dosya içerikleri komut satırı argümanları olarak nasıl kullanılır?
- 8. İçerikleri ayıklayın HttpResponseMessage
- 9. ! Listenin İçerikleri() çalışmıyor
- 10. Hesaplayın Sql
- 11. C# WinForm'da Yaşanan Yılların Hesaplamasını Hesaplayın
- 12. C# içindeki bir dizenin görüntü genişliğini hesaplayın?
- 13. Dosya C içinde bittiğinde yayın nasıl bilinir?
- 14. Web'den bir dosya alın: GTK içinde C
- 15. Bir dosya ve yazdırma dosya özniteliklerini döngü içinde C
- 16. hesaplayın merkezi
- 17. hesaplayın Yüzde
- 18. php: bir dizeden köşeli ayraçları/içerikleri kaldırın
- 19. UITextField temel konumunu hesaplayın
- 20. Paskalya Pazarının tarihini hesaplayın
- 21. PHP: Bir dize içinde f (x) matematik fonksiyonu hesaplayın
- 22. Windows Service için C/FileSystemWatcher içinde C#
- 23. Makro içinde makro içinde C
- 24. C içinde "javadoc" C#
- 25. Hesaplayın "karga sinekleri" uzaklık php
- 26. ReactJs - SyntaxError: gömülü: Sonlandırılmamış JSX içerikleri
- 27. hesaplayın grup yüzdesi - SQL
- 28. Yakut olarak yüzdesini hesaplayın.
- 29. Ürünü LINQ ile hesaplayın
- 30. Hesaplayın Seyrek Matris
Tüm dosyayı bir bayt dizisine dönüştürmek gerçekten gerekli mi? – svick
@svick: Cevabımı güncelledim. Giriş için teşekkürler! –
@MartinMulder, hash'ı saklamak ve TryGetValue ile karşılaştırmak için Sözlük kullanabilir miyim?)) Hash'ın hash değeriyle)) –