Windows Server 2012 R2システムでは、Kotlinプログラムは FileChannel.tryLock()
を使用して、ファイルに排他ロックをかけます。
val fileRw = RandomAccessFile(file, "rw")
fileRw.channel.tryLock()
このロックが設定されていると、Iでファイルを開くことはできません。
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.
Internet Explorer(はい、私は必死でした)
Iはメモ帳で開くことができます。
メモ帳がロックファイルを開くことができる方法は他にありません。
メモ帳は、他のエディタで使用されていると思われる「通常の」ファイル読み取りメカニズムを使用するのではなく、最初にファイルをメモリにマッピングして読み取ります。この方法では、排他的な範囲ベースのロックがある場合でもファイルを読み取ることができます。
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);
}