C# Как записать один байт со смещением?

Я пытаюсь записать один байт в определенное место в файле. Это то, что я использую в данный момент:

BinaryWriter bw = new BinaryWriter(File.Open(filename, FileMode.Open));
bw.BaseStream.Seek(0x6354C, SeekOrigin.Begin);
bw.Write(0xB0);
bw.Close();

Проблема в том, что BinaryWriter.Write(args) записывает в позицию четырехбайтовое целое число со знаком. Я хочу записать только один байт в определенном месте. А затем, возможно, еще два байта, где, как указать, сколько байтов нужно записать?


person Dacto    schedule 11.07.2009    source источник


Ответы (3)


Совершенно нет необходимости использовать высокоуровневый BinaryWriter только для записи простого байта в поток — это более эффективно и аккуратно:

Stream outStream = File.Open(filename, FileMode.Open);
outStream.Seek(0x6354C, SeekOrigin.Begin);
outStream.WriteByte(0xb0);

(В общем, вы также не должны на самом деле искать после присоединения BinaryWriter к вашему потоку - BinaryWriter должен контролировать поток, и изменение вещей «за его спиной» немного грязно)

person Jason Williams    schedule 11.07.2009
comment
Ручной поиск потока не должен вызвать никаких проблем. И это необходимо при написании записи, которая включает размер записи в начале, и когда вы еще не знаете, каков будет фактический размер записи, что не так уж редко. - person Matt; 25.04.2018

сдача

bw.Write(0xB0);

to

bw.Write((byte)0xB0);
person Philippe Leybaert    schedule 11.07.2009

Вы можете привести к байту:

bw.Write((byte)0xB0);

Это должно вызвать правильную перегруженную версию Write.

person Daniel Earwicker    schedule 11.07.2009