怎么修改二进制文件数据?(200分)(200分)

  • 主题发起人 主题发起人 prob
  • 开始时间 开始时间
P

prob

Unregistered / Unconfirmed
GUEST, unregistred user!
我想修改一个二进制文件中的数据,请问有什么办法?比如:一个文件中有一段数据为“003e2b6c3d”,我想改为“53e2e6c3f”.该怎么办?
 
用FileSeek,FileWrite(FileHandle,b,count);就可以了吧。

var b:Array[0..count] of Byte;
 
用随机文件方式打开,但似乎你得自己寻找所需的字符串,
然后修改就行了,好久不用文件了。
 
小弟愚昧,请哪位高手用Delphi举个例子吧。
 
FILE fp1;
unsigned char *ch=new char[FILELENGTH];
int i,len;
fp1=fopen("filename","rb+");
len=fread(ch,1,FILELENGTH,fp1);
for (i=0;i<len-4;i++) {
if (!memcmp(ch,"/x0/x3e/x2b/x6c/x3d",5)) break;
}
if (i<len-4) memcpy(ch+i,"/x5/x3e/x2e/x6c/x3f",5);
fseek(fp1,0,SEEK_SET);
fwrite(ch,1,len,fp1);
fclose(fp1);
 
用UltraEdit打开你要修改的文件,选取菜单中的替换命令在寻找目标中输入
003e2b6c3d, 再替换成中输入53e2e6c3f,然后开始, 如文件中有多处要替
换的字串时就按全部替换。
 
该函数会把指定文件中字串stxt替换为toTxt
procedure restr(fn: Ansistring; stxt, toTxt: string);
var
StrL, x, pos, fpos, num, readnum: integer;
buf: array[0..500] of char;
SFile: file;
L, H: char;
begin
StrL := Length(stxt);
AssignFile(sfile, fn);
reset(sfile, 1);
repeat
buf := #0;
Num := 0;
fpos := filepos(sfile);
blockread(sfile, buf, Sizeof(Buf), readnum);
repeat
Pos := num;
for x := 1 to StrL do begin
L := sTxt[x]; H := Buf[num];
if L = H then begin
inc(num);
if x = StrL then begin
seek(sfile, fpos + pos);
blockWrite(sfile, toTxt[1], Length(totxt));
end;
end
else begin
if x = 1 then inc(num);
break;
end;
end;
until num >= high(buf);
until readnum <= 0;
closefile(sfile);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Findstr('文件名', '003e2b6c3d', '53e2e6c3fs');
end;
 
多人接受答案了。
 
后退
顶部