你用这个函数试试 StringReplace
uses StrUtils
uses StrUtils
解决方案 »
- 下载带密码的网络文件的问题
- 关于估价入库并且估价生产后的回冲问题
- 系统退出时要关闭ADOConnection吗?
- 今天老板让我开他的车,我拒绝了。
- PC串口连手机模块发送短信(用MSComm控件)给分100
- rmdir()的用法
- 请教;ehlib3.5问题
- 请问各位大哥dbExpress如何在installshield express中安装和发布?重金 :))
- TFlatSpeedButtonUnit, TFlatHintUnit控件在哪里才能够找到?
- 谁帮我说说override的具体用法?详细点的书上介绍的太简单看了还是不清楚!
- 十万火急的 求救 怎么处理 SQL语句中数据库字段名不能识别的问题啊
- 关于压缩解压问题
按第三次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文件则要麻烦些