//线程:
unit FileRead;interfaceuses
  Classes, SysUtils;type
  TFileReadThread = class(TThread)
  private
    { Private declarations }0D
    FFileName:String;
    FOutFile:String;
    FStart:Integer;
    FLen:Integer;
  protected
    procedure Execute; override;
  public
    constructor Create (FileName,OutFile:String;Start,Len:Integer);
  end;implementation{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,      Synchronize(UpdateCaption);  and UpdateCaption could look like,    procedure TFileReadThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }{ TFileReadThread }constructor TFileReadThread.Create(FileName,OutFile: String; Start, Len: Integer);
begin
 FFileName := FileName;
 FOutFile :=OutFile;
 FStart := Start;
 FLen := Len;
 FreeOnTerminate := True;
 Inherited Create(false);
0Aend;procedure TFileReadThread.Execute;
var
  InStream,OutStream:TStream;0D
  buf:Array of Byte;
begin
  { Place thread code here }0D
  InStream := TFileStream.Create(FFileName,fmOpenRead or fmShareDenyWrite);
  OutStream := TFileStream.Create(FOutFile,fmCreate);
  SetLength(Buf,FLen);
  InStream.Seek(FStart,soFromBeginning);
  FLen := InStream.Read(Buf[0],FLen);0D
  OutStream.Write(Buf[0],FLen);
  OutStream.Free;
  InStream.Free;
end;end.//调用:const
  LINELEN = 1;
var
  i:Integer;
  Len:Integer;
  fstr:TStream;
begin
  fStr := TFileStream.Create('E:\OldTree\a\a.txt',fmOpenRead or fmShareDenyWrite);
  Len := (Trunc(((fStr.Size / 10) / (LINELEN +2))) +1) * (LINELEN + 2);
  //设置Len为一行的整数倍,注意CR/LF为两个字符.
  for i:=0 to 9 do
    TFileReadThread.Create('E:\OldTree\a\a.txt','E:\OldTree\a\a' + IntToStr(i) + '.txt',i*Len,Len);
  fstr.Free;
end;//以上假设每行的长度相同,如果不同,则需另想办法设置Start和Len.
     ____     ____
     \ p \   / g /
      \ l \_/ n /
       \ a   o /
        \ i s /
         \ n /
          \_/