Search code examples
c#.netipcaccessormemory-mapped-files

Read all contents of memory mapped file or Memory Mapped View Accessor without knowing the size of it


I need something similar to ReadToEnd or ReadAllBytes to read all of the contents of the MemoryMappedFile using the MappedViewAccessor if I don't know the size of it, how can I do it?

I have searched for it, I have seen this question, but it is not the thing I am looking for:

How can I quickly read bytes from a memory mapped file in .NET?

Edit:

There is a problem, the (int)stream.Length is not giving me the correct length, it rather gives the size of the internal buffer used! I need to refresh this question because it is very pressing.


Solution

  • Rather use the Stream:

    public static Byte[] ReadMMFAllBytes(string fileName)
    {
        using (var mmf = MemoryMappedFile.OpenExisting(fileName))
        {
            using (var stream = mmf.CreateViewStream())
            {
                using (BinaryReader binReader = new BinaryReader(stream))
                {
                    return binReader.ReadBytes((int)stream.Length);
                }
            }
        }
    }