Альтернативы BinaryWriter для 64-битных файлов?

BinaryWriter — невозможно выполнить поиск 64-битных значений. Параметр, переданный в функцию Seek (int32) Есть ли аналогичный класс для файлов размером более 2 Гб?


person Mixer    schedule 27.01.2013    source источник
comment
Есть ли причина, почему это важно? Я не хочу показаться грубым... но, конечно же, дополнительный поиск не вызовет у вас никаких проблем с производительностью...   -  person Simon Whitehead    schedule 27.01.2013
comment
Это просто. Мне нужно открыть большой файл (заранее записанный) и изменить в нем несколько байтов. Код уже использует BinaryWriter, поэтому я бы не стал передавать этот класс. Можно ли выполнить Seek BinaryWriter.BaseStream?   -  person Mixer    schedule 27.01.2013
comment
Длина файла более 32 бит (т.е. 2Гб для знака Int32)   -  person Mixer    schedule 27.01.2013
comment
Да, вызовите Seek для свойства BaseStream.   -  person Jim Mischel    schedule 27.01.2013


Ответы (1)


Обычное решение этой проблемы заключается в поиске FileStream (которые поддерживают позицию long) перед созданием BinaryReader.

person Cédric Bignon    schedule 27.01.2013
comment
Если файл уже открыт, могу ли я использовать BinaryWriter.BaseStream для изменения позиций? Или это неправильно? По крайней мере текущую позицию я получаю от этого класса (BinaryWriter.BaseStrem.Position). И вообще, нормально ли BinaryWriter пишет за границу 2гб? - person Mixer; 27.01.2013
comment
Это может сработать, но результат не гарантирован. Из msdn : Использование базовый поток при чтении или использовании BinaryReader может привести к потере и повреждению данных. Например, одни и те же байты могут быть прочитаны более одного раза, байты могут быть пропущены или чтение символов может стать непредсказуемым. - person Cédric Bignon; 27.01.2013
comment
За исключением того, что он использует BinaryWriter, и вы можете избежать проблем с повреждением, вызывая Flush перед вызовом BaseStream.Seek. - person Jim Mischel; 27.01.2013