2013-03-05 2 views
1

В этом вопросе,чтения памяти отображается файл или зная его размер, чтобы прочитать его correctely

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

есть проблема, (int)stream.Length не дает мне правильную длину, она скорее дает размер самого используется внутренний буфер! Мне нужно обновить этот вопрос, потому что это очень важно.

Основной вопрос был:

мне нужно что-то похожее на ReadToEnd или ReadAllBytes прочитать все содержимое, используя отображение файла в память MappedViewAccessor, если я не знаю размер его, как можно Я делаю это?

Я искал его, я видел этот вопрос, но это не вещи, которую я ищу:

Как я могу быстро прочитать байты из памяти отображенного файла в .NET?

старый ответ был:

паба

public static 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)); 
      } 
     } 
    } 
} 

В этом вопросе:

Memory Mapped File Length

Там нет точного ответа точного вопроса! вопрос касается чего-то другого, кроме названия.

+0

Помог ли этот ответ? http://stackoverflow.com/a/8613300/2258 Или ответ Джона Скита: http://stackoverflow.com/a/221941/2258 –

+0

Не работает, он дает мне 4096 байт, даже если файл пуст :( –

+0

Просто напишите длину потока, а также в начале представления. –

ответ

1

Лучшим подходом является отправка заголовка фиксированной длины в первую очередь, а не просто передача необработанных байтов. Таким образом, первый blob, который вы читаете, является согласованной длиной, и он дает вам информацию, необходимую для чтения остатка переменной длины.

В простейшем случае ваша запись может быть такой же простой, как с первым полем длины, за которым следует полезная нагрузка (ваши байты). В зависимости от ваших потребностей вы можете добавлять данные в заголовок, например, тип записи, версию и т. Д.