संपादित करें: मैंने इसे उदाहरण के रूप में दोबारा लिखा है क्योंकि कोड अपेक्षा के अनुसार काम करता है।सी # एमडी 5 हैशर उदाहरण
मैं एक फ़ाइल कॉपी करने की कोशिश कर रहा हूं, एमडी 5 हैश प्राप्त कर रहा हूं, फिर प्रतिलिपि हटाएं। मैं मूल फ़ाइल पर प्रक्रिया ताले से बचने के लिए ऐसा कर रहा हूं, जो एक और ऐप लिखता है। हालांकि, मुझे कॉपी की गई फाइल पर लॉक मिल रहा है।
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
कथन के साथ, फाइलस्ट्रीम अच्छी तरह से बंद हो जाएगा। मैंने पढ़ने के बाद using
को हटाकर, fs.Close()
और fs.Dispose()
को हटाकर, फाइलस्ट्रीम को अलग से घोषित करने का भी प्रयास किया है।
इसके बाद, मैंने वास्तव में एमडी 5 गणना की टिप्पणी की, और फ़ाइल को हटाए जाने के साथ कोड उत्तेजित, इसलिए ऐसा लगता है कि यह ComputeHash(fs)
के साथ कुछ करना है।
आप क्यों नहीं बस ReadAllBytes (फोन नहीं है) और इसके साथ किया जा सकता है? – BobbyShaftoe
क्योंकि गणना करने के लिए उसकी कॉल स्ट्रीम पर चलती है- यदि फ़ाइल बड़ी है तो उसे इसे स्मृति में रखने की आवश्यकता नहीं होगी। –
क्या आपको इसे हटाने से पहले फ़ाइल को बंद करने की आवश्यकता नहीं है? – JonnyBoats