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