C# 使用带有MemoryMappedFile的PositionPointer引发异常?

C# 使用带有MemoryMappedFile的PositionPointer引发异常?,c#,memory-mapped-files,C#,Memory Mapped Files,当我将PositionPointer与MemoryMappedFile一起使用时,我得到的错误是 其他信息:从SafeBuffer创建的非托管MemoryStream不支持此操作 ,好吧,它不受支持,但为什么c#开发人员将此属性放在MemoryMappedViewStream中 这是我的代码: FileStream fs = new FileStream("hello.txt", FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.

当我将PositionPointer与MemoryMappedFile一起使用时,我得到的错误是

其他信息:从SafeBuffer创建的非托管MemoryStream不支持此操作

,好吧,它不受支持,但为什么c#开发人员将此属性放在MemoryMappedViewStream中

这是我的代码:

    FileStream fs = new FileStream("hello.txt", FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.ReadWrite);

        MemoryMappedFile mem = MemoryMappedFile.CreateFromFile(fs,"map",0,
MemoryMappedFileAccess.ReadWrite,null,0,false);


        MemoryMappedViewStream mems = mem.CreateViewStream(0, 0, MemoryMappedFileAccess.ReadWrite);

        unsafe
        {
            byte* pointer = mems.PositionPointer;
        }

我也遇到了这个问题,我不确定为什么访问
PositionPointer
会引发
MemoryMappedViewStream
但如果您使用
MemoryMappedViewAccessor
,您将能够获得一个指针

using var file = MemoryMappedFile.CreateNew( "MyCustomFile", 1024, MemoryMappedFileAccess.ReadWrite );
using var view = file.CreateViewAccessor( 0, 512, MemoryMappedFileAccess.ReadWrite );            

// Attain a pointer to the unmanaged memory.
byte* ptr = null;
view.SafeMemoryMappedViewHandle.AcquirePointer( ref ptr );

// You can store the pointer in a span for
// easy manipulation.
var span = new Span<byte>( ptr, 512 );
使用var file=MemoryMappedFile.CreateNew(“MyCustomFile”,1024,MemoryMappedFileAccess.ReadWrite);
使用var view=file.CreateViewAccessor(0,512,MemoryMappedFileAccess.ReadWrite);
//获取指向非托管内存的指针。
字节*ptr=null;
view.SafeMemoryMappedViewHandle.AcquirePointer(ref ptr);
//您可以将指针存储在一个范围内,以便
//操作简单。
var span=新span(ptr,512);