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);

(โดยทั่วไปแล้ว คุณไม่ควร Seek หลังจากแนบ 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