[英]Read Memory Memory Mapped File C++ and C#
[英]Read memory mapped file created by c++ into c#
基本上我有一個二進制文件,它是使用c ++內存映射庫創建的。 我擁有有關c ++中的struct的所有信息。 我正在嘗試使用c#中的內存映射庫讀取該二進制文件。 有人可以告訴我任何文章或博客來顯示如何實現這一目標嗎?
我正在努力將c ++結構映射到c#結構,以及讀取和映射內容所需的步驟。
提前致謝。
首先,使用FileStream
打開文件。
var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
然后從該流實例化BinaryReader
。 這不是完全必需的,但是使處理二進制數據更加容易。
var reader = new BinaryReader(stream);
接下來,根據結構需要讀入盡可能多的字節,如Marshal.SizeOf
:
var bytes = reader.ReadBytes(Marshal.SizeOf(typeof (MyStruct)));
然后,我們使用GCHandle.Alloc
“固定”托管的內存,以使GC不會移動它:
var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
最后,我們使用Marshal.PtrToStructure
將該緩沖區轉換為托管結構:
var myStruct = (MyStruct)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(), typeof (MyStruct));
不要忘記釋放GCHandle:
handle.Free();
return theStructure;
}
這是包裝在通用函數中的一部分示例。
雖然我還沒有嘗試過,但是我非常有信心這也可以通過使用MemoryMappedFile
並調用CreateViewStream
(將其傳遞給BinaryReader
)來實現。
var mmfile = MemoryMappedFile.CreateFromFile(path);
var stream = mmfile.CreateViewStream();
var reader = new BinaryReader(stream);
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.