替换文件中的字节

时间:2017-07-04 10:56:16

标签: c# hex binarywriter

我正在尝试用一些其他特定字节替换文件中的某些字节,但是我的二进制写入器替换了太多字节时出现问题。我的代码出了什么问题?

using (BinaryWriter bw = 
    new BinaryWriter(File.Open(fileName, 
        FileMode.Open)))
{
    bw.BaseStream.Position = 0x3;
    bw.Write(0x50);
}

这应该用字母“P”改变字母“E”(十六进制0x45),而是改变那个字节和另外3个字节;从“45 30 31 FF”到“50 00 00 00”。我想保留“30 31 FF”,只将“45”改为“50”。

2 个答案:

答案 0 :(得分:3)

基本上,您不希望或需要使用BinaryWriter。您正在调用BinaryWriter.Write(int),其行为完全符合记录。

只需使用FileStream写一个字节:

using (var stream = File.Open(fileName))
{
    stream.Position = 3;
    stream.WriteByte(0x50);
}

更简单,更容易阅读(显然只写一个字节),并做你想要的。

答案 1 :(得分:1)

因为方法@Echo Off For /F "Tokens=1*Delims=:" %%A In ('FindStr/N $ "%~n0.txt"') Do ( If "%%B"=="(" If Not Defined FL Set/A FL=%%A+1 If "%%B"==")" If Not Defined LL Set/A LL=%%A-1) Set "i=0" If FL LEq LL For /L %%A In (%FL%,1,%LL%) Do For /F "Tokens=1*Delims=:" %%B In ( 'FindStr/N $ "%~n0.txt"') Do If "%%B"=="%%A" If Not "(%%C"=="(" Set/A i+=1 Echo( [%i%] Timeout -1 实际上写Write(4个字节)。您应该将值转换为int类型。 byte