私は2つのプロセスを持っています。1 つは .NET 4 MemoryMappedFiles を使用してメモリ マップされたファイルに書き込み、もう 1 つは .NET 3.5 (MONO) の FileStream を使用してファイルを読み取ります。許可を得ると、すべてが正常に機能し、ファイルの読み取りまたは書き込みに問題はありません。問題は、許可を取得することです。
MMF の書き込み (ライター):
MemoryMappedFile.CreateFromFile
(filenameToMap, FileMode.Create, "Something",
Marshal.SizeOf(objectToMap), MemoryMappedFileAccess.ReadWrite);
MMF の読み取り (リーダー):
new FileStream(filenameToMap, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
最初に Writer を起動し、次に Reader を起動します。
この素朴なアプローチを使用してテストしました:
while (true)
{
try
{
new FileStream(mapPath + "map.mp", FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
break;
}
catch { }
}
通常、約 10 秒後にリーダーは許可を取得し、すべてがスムーズに実行されます。例外をキャッチすると、次のようにスローされます。
IOException: System.IO.FileStream..ctor のパス C:\path での共有違反 (System.String パス、FileMode モード、FileAccess アクセス、FileShare 共有、Int32 bufferSize、Boolean anonymous、FileOptions オプション) [0x00000] in :0
これらの 2 つのプロセスが最初からファイルを適切に共有しない理由は何ですか?