我認爲這是最好的一個具體的例子說明。下面是在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