MemoryMappedFile を使用して既存のバイナリ ファイルにアクセスしたいと考えていました。これが可能な場合でも、私は狂った人ですか?
アイデアは、既存のバイナリファイルをメモリに直接マップして、できればより高速な操作を行うことです。または、少なくともこれらの機能がどのように機能するかを確認します。
using System.IO.MemoryMappedFiles;
System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\testparsercap.pcap");
MemoryMappedFileSecurity sec = new MemoryMappedFileSecurity();
System.IO.FileStream file = fi.Open(System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);
MemoryMappedFile mf = MemoryMappedFile.CreateFromFile(file, "testpcap", fi.Length, MemoryMappedFileAccess.Read, sec, System.IO.HandleInheritability.Inheritable, true);
MemoryMappedViewAccessor FileMapView = mf.CreateViewAccessor();
PcapHeader head = new PcapHeader();
FileMapView.Read<PcapHeader>(0, out head);
System.UnauthorizedAccessException was unhandled (Message=Access to the path is denied.) が mf.CreateViewAccessor() 行に表示されます。
私は安全でない管理者ユーザーとして実行しており、ファイルに読み取りロックを設定している可能性のある他のプログラムが開いていないため、ファイルのアクセス許可ではないと思います。これは、UAC が無効になっている Vista です。
単にそれが不可能で、ドキュメントに記載されていないものがある場合は、お知らせください。.net 4.0 のこの機能を参照するものはほとんど見つかりませんでした
ありがとう!