Not Defteri hepsini yener mi?


134

Windows Server 2012 R2 sisteminde, Kotlin programı FileChannel.tryLock()bir dosyada aşağıdaki gibi özel bir kilit tutmak için kullanır :

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

Bu kilit takılıyken dosyayı şu şekilde açamıyorum:

  • WordPad
  • Notepad ++
  • Herhangi bir değeri için programlı olarak C # ile FileShare:

    using (var fileStream = new FileStream(processIdPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    using (var textReader = new StreamReader(fileStream))
    {
        textReader.ReadToEnd();
    }
  • Komut satırından, typekomut:

    C:\some-directory>type file.txt
    The process cannot access the file because another process has locked a portion of the file.
  • Internet Explorer (evet, çaresizdim)

Ben yapabilirsiniz Not Defteri ile açın.

Notepad başka hiçbir şeyin yapamayacağı kilitli bir dosyayı nasıl açabilir?

Yanıtlar:


202

Not Defteri, muhtemelen denediğiniz diğer editörler tarafından kullanılan "olağan" dosya okuma mekanizmalarını kullanmak yerine dosyaları belleğe eşleyerek okur. Bu yöntem, özel bir aralık tabanlı kilitleri olsa bile dosyaların okunmasına izin verir.

Aynı şeyi C # 'da aşağıdaki çizgilerle de elde edebilirsiniz:

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'un Raymond Chen tarafından daha ayrıntılı olarak onaylandı : Bir dosyayı yüklemek için Not Defteri, dosyanın bir görünümünü bellek eşlemeli bir dosya olarak eşler ve bunu kaynak olarak kullanır. Kod, kodlamayı çözer, gerekirse UTF-16LE'ye bir kod sayfası dönüşümü gerçekleştirir, sonucu bir bellek bloğuna koyar ve ardından tüm bloğu düzenleme denetimine vermek için EM_SETHANDLE iletisini kullanır.
Stevoisiak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.