记事本击败了所有人?

单线程

在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(是的,我很拼命)

可以用记事本打开它。

记事本如何能够打开其他没有其他东西的锁定文件?

记事本通过首先将文件映射到内存中来读取文件,而不是使用您尝试使用的其他编辑器可能使用的“常规”文件读取机制。即使文件具有基于范围的排他锁,此方法也可以读取文件。

您可以通过以下方式在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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除所有人的讯息

来自分类Dev

记事本++所有行蓝色

来自分类Dev

.htaccess拒绝所有人都行不通

来自分类Dev

从Wikipedia API检索所有人

来自分类Dev

允许所有人锁定/解锁ClearCase分支

来自分类Dev

链接随后的承诺并等待所有人解决

来自分类Dev

Java String.Split拆分所有人

来自分类Dev

.htaccess拒绝所有人都行不通

来自分类Dev

与所有人共享的“用户”文件夹

来自分类Dev

加入或合并所有人以合并记录?

来自分类Dev

icacls拒绝所有人不工作的删除

来自分类Dev

维基百科所有人URI

来自分类Dev

Haskell中的“为所有人”声明

来自分类Dev

向所有人授予我的访问权限?

来自分类Dev

全面控制所有人的Windows

来自分类Dev

用列表向所有人承诺

来自分类Dev

将记事本++设为所有记事本文档的默认编辑器

来自分类Dev

为所有人(所有人除外)设置文件夹的权限

来自分类Dev

删除所有重复的行记事本++

来自分类Dev

所有.cmd文件用记事本打开

来自分类Dev

意外删除了记事本++中的所有行?

来自分类Dev

如何删除记事本++中的所有奇数行?

来自分类Dev

所有.cmd文件用记事本打开

来自分类Dev

在“记事本”中打开的所有文档中“查找”?

来自分类Dev

记事本++用空格分隔所有条目

来自分类Dev

SignalR-向所有人发送消息,不包括用户的所有连接

来自分类Dev

如何设置ACL以允许所有人从REST API列出所有用户

来自分类Dev

SQL插入使所有用户与所有人成为朋友

来自分类Dev

MySQL SELECT匹配X的所有人,然后选择每个人家中的所有人