我试图找到并替换文本文件中的文本.我过去能够用以下方法做到这一点:
procedure SmallFileFindAndReplace(FileName, Find, ReplaceWith: string);
begin
with TStringList.Create do
begin
LoadFromFile(FileName);
Text := StringReplace(Text, Find, ReplaceWith, [rfReplaceAll, rfIgnoreCase]);
SaveToFile(FileName);
Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,当文件相对较小时,上述工作正常; 当文件大小类似于170 Mb时,上面的代码将导致以下错误:EOutOfMemory,消息"Out of memory"
我已经尝试了以下成功,但运行需要很长时间:
procedure Tfrm_Main.button_MakeReplacementClick(Sender: TObject);
var
fs : TFileStream;
s : AnsiString;
//s : string;
begin
fs := TFileStream.Create(edit_SQLFile.Text, fmOpenread or fmShareDenyNone);
try
SetLength(S, fs.Size);
fs.ReadBuffer(S[1], fs.Size);
finally
fs.Free;
end;
s := StringReplace(s, edit_Find.Text, edit_Replace.Text, [rfReplaceAll, rfIgnoreCase]);
fs := TFileStream.Create(edit_SQLFile.Text, fmCreate);
try
fs.WriteBuffer(S[1], Length(S));
finally
fs.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我是"Streams"的新手并使用缓冲区.
有一个更好的方法吗?
谢谢.