我认为这是最好的一个具体的例子说明。下面是在Visual Studio中的十六进制编辑器显示的前32个字节的可执行文件:
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
现在文件确实是字节只是一个线性序列。您在十六进制编辑器中看到的行只是为了使事情更易于阅读。如果要使用代码操作文件中的字节,则需要通过基于0的位置来标识字节。在上述例子中,是非零的字节位置如下:
Position Value
-------- ------
0 0x4D
1 0x5A
2 0x90
4 0x03
8 0x04
12 0xFF
13 0xFF
16 0xB8
24 0x40
在上面所示的十六进制编辑器的表示,在左边的数字表示在相应的行中的第一个字节的位置。编辑器每行显示16个字节,所以它们每行增加16(0x10)。
如果您只想取出文件中的一个字节并更改其值,那么我所看到的最有效的方法就是使用FileStream打开文件,找到适当的位置并覆盖该字节。例如,下面将在24位改变0x40的为0×04:
using (var stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) {
stream.Position = 24;
stream.WriteByte(0x04);
}
我能得到它correclty要覆盖在给定位置的几个字节的文件已经在磁盘上? – 2010-07-10 05:04:07