你用这个函数试试  StringReplace
uses StrUtils

解决方案 »

  1.   

    问题1、为什么这段代码编译后 运行三次Button1 后文件大小就变了。假设文件中有两个'需要改的内容'这样的字符串,按下一次替换一个,按下二次替换完
    按第三次lPosition := ScanStream(F, '需要改的内容');  //返回结果为0
        F.Position := lPosition; 
    那么就会在文件开头写入字串'改成后的内容'
    因而文件长度会发生改变所以代码要修改:
    function ScanStream(T:Tstream;S:String):integer;
     var
        i,j:integer;
      p:Pchar;
     begin
      result:=-1;
        getMem(p,T.size);//分配内存
      T.ReadBuffer(p^,t.Size );//读
      for i:=0 to T.Size -1 do begin
      for j:=1 to length(S) do
      if p[i+j] <>S[j] then break;//有一个不同即退出
      if j>length(S) then begin //依据
      result:=i;
      break; //完成
      end;
      end;
      FreeMem(p);
     end;
    procedure TForm1.Button1Click(Sender: TObject);
      var
        F: TFileStream;
        lPosition: Integer;
      begin
        F := TFileStream.Create('文件名.exe', fmOpenReadWrite);
        lPosition := ScanStream(F, '需要改的内容');
        if lPosition>=0 then
        begin
          F.Position := lPosition;
          F.Write('改成后的内容', StrLen('改成后的内容'));
        end;
        F.Free;
    end; 问题2、怎样才能利用这段代码实现一次性替换多处'需要改的内容'?如果是纯字符的文件,用stringreplace最好不过
    如果是Hex文件则要麻烦些