每次读入一部分,处理;再读入,处理;直到读完。function TForm1.LoadLargeFile(FileName: string): Boolean;
const B=$8FFF; //每次读入的长度;
var Stream: TStream; I: Integer; S: string;
begin
Stream:=TFileStream.Create(FileName, fmOpenRead);
try
if Stream.Size<=FCount then begin Exit; end;
//FCount是私有量,保存已经读入的长度;
Stream.Position:=FCount;
I:=Stream.Size-FCount;
if I>B then I:=B;
SetLength(S, I);
Stream.ReadBuffer(S[1], I); //此时,已经读入I字节;
Inc(FCount, I);
Memo1.Lines.Clear;
Memo1.Lines.Add(S);
finally
Stream.Free;
end;
end;
const B=$8FFF; //每次读入的长度;
var Stream: TStream; I: Integer; S: string;
begin
Stream:=TFileStream.Create(FileName, fmOpenRead);
try
if Stream.Size<=FCount then begin Exit; end;
//FCount是私有量,保存已经读入的长度;
Stream.Position:=FCount;
I:=Stream.Size-FCount;
if I>B then I:=B;
SetLength(S, I);
Stream.ReadBuffer(S[1], I); //此时,已经读入I字节;
Inc(FCount, I);
Memo1.Lines.Clear;
Memo1.Lines.Add(S);
finally
Stream.Free;
end;
end;
RichEdit1.MaxLength := High(integer) - 1024;
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
理论上讲,RichEdit可以处理2G大小的数据,几M算不了什么
还是分段读取处理;或者用内存映射文件,不过我没用过,不知道速度怎样。