C# Bagaimana cara menulis satu byte pada offset?

Saya mencoba menulis satu byte di lokasi tertentu dalam sebuah file. Inilah yang saya gunakan saat ini:

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

Masalahnya adalah BinaryWriter.Write(args) menulis bilangan bulat bertanda empat byte pada posisi tersebut. Saya hanya ingin menulis satu byte di lokasi tertentu. Dan kemudian mungkin dua byte di tempat lain, bagaimana saya menentukan berapa byte yang akan ditulis?


person Dacto    schedule 11.07.2009    source sumber


Jawaban (3)


Sama sekali tidak perlu menggunakan BinaryWriter tingkat tinggi hanya untuk menulis byte sederhana ke aliran - Lebih efisien dan rapi hanya dengan melakukan ini:

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

(Secara umum Anda juga tidak boleh benar-benar Mencari setelah melampirkan BinaryWriter ke aliran Anda - BinaryWriter harus mengendalikan aliran, dan mengubah hal-hal "di belakang punggungnya" agak kotor)

person Jason Williams    schedule 11.07.2009
comment
Mencari aliran secara manual seharusnya tidak menimbulkan masalah. Dan hal ini diperlukan ketika menulis sebuah record yang menyertakan ukuran record di awal, dan ketika Anda belum mengetahui berapa ukuran sebenarnya dari record tersebut, hal ini bukanlah hal yang tidak biasa. - person Matt; 25.04.2018

mengubah

bw.Write(0xB0);

to

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

Anda dapat mentransmisikan ke byte:

bw.Write((byte)0xB0);

Ini akan menyebabkan versi Write yang kelebihan beban dipanggil.

person Daniel Earwicker    schedule 11.07.2009