//线程:
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 /
\_/
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 /
\_/
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货