每次读入一部分,处理;再读入,处理;直到读完。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;

解决方案 »

  1.   

    用缓冲技术,申请一个Buffer(例如4kb),每次处理Buffer中的数据,处理完后再读入后继的文件内容进行处理……
      

  2.   

    速度要求不很高的话,一个RichEdit就可以搞定啦!
      RichEdit1.MaxLength := High(integer) - 1024;
      if OpenDialog1.Execute then
        RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
    理论上讲,RichEdit可以处理2G大小的数据,几M算不了什么
      

  3.   

    to liuly:是啊,几M算不了什么!!!只不过内存要非常大罢了!!!用此方法时,请耐心等待,文件打开时间是需要很长的!
    还是分段读取处理;或者用内存映射文件,不过我没用过,不知道速度怎样。