【问题标题】:C# How to write one byte at an offset?C#如何在偏移处写入一个字节?
【发布时间】:2009-07-11 18:34:44
【问题描述】:

我试图在文件的某个位置写入一个字节。这是我目前使用的:

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

问题在于 BinaryWriter.Write(args) 在该位置写入一个四字节有符号整数。我希望只在特定位置写入一个字节。然后可能是其他两个字节,我如何指定要写入多少字节?

【问题讨论】:

    标签: c# io byte


    【解决方案1】:

    改变

    bw.Write(0xB0);
    

    bw.Write((byte)0xB0);
    

    【讨论】:

      【解决方案2】:

      绝对没有必要使用高级 BinaryWriter 来将一个简单的字节写入流 - 这样做更高效、更整洁:

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

      (一般来说,在将 BinaryWriter 附加到流后,您也不应该真正 Seek - BinaryWriter 应该控制流,并且“在其背后”更改内容有点脏)

      【讨论】:

      • 手动寻找流应该不会导致任何问题。并且在写入包含开头记录大小的记录时,以及当您还不知道记录的实际大小将是多少时,这是必要的,这并不罕见。
      【解决方案3】:

      你可以转换成字节:

      bw.Write((byte)0xB0);
      

      这应该会导致调用正确的重载版本的 Write。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-24
        • 2016-11-28
        • 2012-04-02
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多