C # Как записать один байт со смещением? - PullRequest
1 голос
/ 11 июля 2009

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

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

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

Ответы [ 3 ]

3 голосов
/ 11 июля 2009

изменение

bw.Write(0xB0);

до

bw.Write((byte)0xB0);
2 голосов
/ 11 июля 2009

Нет абсолютно никакой необходимости использовать высокоуровневый BinaryWriter просто для записи простого байта в поток. Это более эффективно и аккуратно, просто сделав это:

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

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

1 голос
/ 11 июля 2009

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

bw.Write((byte)0xB0);

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

...