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



windows locking (1)

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

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

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

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

    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.
  • इंटरनेट एक्सप्लोरर (हाँ, मैं हताश था)

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

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


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

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

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);
}




file-locking