नोटपैड उन सभी को धड़कता है?


134

Windows Server 2012 R2 सिस्टम पर, एक कोटलिन प्रोग्राम FileChannel.tryLock()किसी फ़ाइल पर एक विशेष लॉक को रखने के लिए उपयोग करता है, जैसे:

val fileRw = RandomAccessFile(file, "rw")
fileRw.channel.tryLock()

इस स्थान पर लॉक होने के साथ, मैं फ़ाइल को इसके साथ नहीं खोल सकता :

  • वर्ड पैड
  • Notepad ++
  • किसी भी मान के लिए C # के साथ प्रोग्राम करें FileShare:

    using (var fileStream = new FileStream(processIdPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    using (var textReader = new StreamReader(fileStream))
    {
        textReader.ReadToEnd();
    }
  • कमांड लाइन से, typeकमांड:

    C:\some-directory>type file.txt
    The process cannot access the file because another process has locked a portion of the file.
  • इंटरनेट एक्सप्लोरर (हाँ, मैं हताश था)

मैं इसे नोटपैड के साथ खोल सकता हूं ।

कैसे हेक नोटपैड एक बंद फ़ाइल को खोलने में सक्षम है जो और कुछ नहीं कर सकता है?

जवाबों:


202

नोटपैड ने फ़ाइलों को पहले मेमोरी में मैप करके पढ़ा, न कि "सामान्य" फाइल रीडिंग मेकेनिज्म का उपयोग करने के बजाय जो आपके द्वारा आजमाए गए अन्य संपादकों द्वारा उपयोग किया जाता है। यह विधि फ़ाइलों को पढ़ने की अनुमति देती है, भले ही उनके पास एक विशेष श्रेणी-आधारित ताले हों।

आप सी # में उसी के साथ कुछ हासिल कर सकते हैं:

using (var f = new FileStream(processIdPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var m = MemoryMappedFile.CreateFromFile(f, null, 0, MemoryMappedFileAccess.Read, null, HandleInheritability.None, true))
using (var s = m.CreateViewStream(0, 0, MemoryMappedFileAccess.Read))
using (var r = new StreamReader(s))
{
    var l = r.ReadToEnd();
    Console.WriteLine(l);
}

58
Microsoft के रेमंड चेन द्वारा अधिक विस्तार से पुष्टि की गई : एक फ़ाइल को लोड करने के लिए, नोटपैड फ़ाइल को मेमोरी-मैप की गई फ़ाइल के रूप में मैप करता है और स्रोत के रूप में इसका उपयोग करता है। कोड एन्कोडिंग से बाहर आ जाता है, यदि आवश्यक हो तो UTF-16LE के लिए एक कोड पृष्ठ रूपांतरण करता है, परिणाम को मेमोरी ब्लॉक में डालता है, और फिर उस संपूर्ण ब्लॉक को संपादन नियंत्रण में सौंपने के लिए EM_SETHANDLE संदेश का उपयोग करता है।
स्टेवोइसेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.