2011/04/18

.Net 4.0でメモリマップドファイルを扱う

プロセス間で情報をやり取りする方法のひとつとして、
Win32 APIの時代から 『メモリマップドファイル』 を利用する方法があったようなのですが、
こいつをC# (.Net 4.0)で扱うという状況が最近ありました。

ゴリゴリとAPIを書かなくて良いのでとても便利なのですが、ちょっとハマったのでc⌒っ*゚д゚)φ メモメモ...
string strMappedFileName = "hoge.dat" // MemoryMappedFileの名前

// MemoryMappedFileが存在している環境で、それを「Read権限」でOpenする
using (var mmf = MemoryMappedFile.OpenExisting(strMappedFileName, MemoryMappedFileRights.Read))
{
   // MemoryMappedFileを「Read権限」で開いたから、Accessorも「Read権限」で開かなくてはならない
   using (var accessor = mmf.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read))
   {                        
        accessor.ReadArray(...);
   }
}

ポイントは、『MemoryMappedFileを開くときに指定した権限で、Accessorも開かなくてはならない』ですw
最初なかなか気づけなかったです・・・。 ( ;´・ω・`)私だけでしょうか・・?ww

参考URL:
[UnauthorizedAccessException on MemoryMappedFile in C# 4.]
http://stackoverflow.com/questions/1220913/unauthorizedaccessexception-on-memorymappedfile-in-c-4

2 件のコメント:

mega さんのコメント...

共有メモリはアクセス制限があった方が個人的には何となく安心かな。

ケモケモ さんのコメント...

「うっかりメインプログラムのデータ書き換えちゃった、てへっ☆」
なんていうのは避けたいからね・・・。僕もアクセス制限ありが嬉しいでつ(`・ω・´)