c# - write - 記事本打敗了他們?



windows locking (1)

記事本通過首先將文件映射到內存來讀取文件,而不是使用您嘗試過的其他編輯器可能使用的“通常”文件讀取機制。 此方法允許讀取文件,即使它們具有基於範圍的獨占鎖定。

您可以在C#中實現相同的功能:

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

在Windows Server 2012 R2系統上,Kotlin程序使用 FileChannel.tryLock() 對文件進行獨占鎖定,如下所示:

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

有了這個鎖,我 無法 打開文件:

  • 寫字板
  • 記事本+ +
  • 使用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.
  • Internet Explorer(是的,我很絕望)

可以 用記事本打開它。

記者怎麼能打開一個鎖定的文件,沒有別的可以嗎?





file-locking