Split/merge files?

Previous  Top  Next

    
 

 

 

Code:

{

Parameters:

 

FileToSplit: Specify a file to split.

SizeofFiles: Specify the size of the files you want to split to (in bytes)

Progressbar: Specify a TProgressBar to show the splitting progress

 

Result:

SplitFile() will create files  FileName.001, FileName.002, FileName.003 and so on

that are SizeofFiles bytes in size.

}

 

function SplitFile(FileName : TFileName; SizeofFiles : Integer; ProgressBar : TProgressBar) : Boolean;

var

i : Word;

fs, sStream: TFileStream;

SplitFileName: String;

begin

ProgressBar.Position := 0;

fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);

try

   for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do

   begin

     SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));

     sStream := TFileStream.Create(SplitFileName, fmCreate or fmShareExclusive);

     try

       if fs.Size - fs.Position < SizeofFiles then

         SizeofFiles := fs.Size - fs.Position;

       sStream.CopyFrom(fs, SizeofFiles);

       ProgressBar.Position := Round((fs.Position / fs.Size) * 100);

     finally

       sStream.Free;

     end;

   end;

finally

   fs.Free;

end;

 

end;

 

// Combine files / Dateien zusammenfuhren

 

{

Parameters:

 

FileName: Specify the first piece of the splitted files

CombinedFileName: Specify the combined file name. (the output file)

 

Result:

CombineFiles() will create one large file from the pieces

}

 

function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean;

var

i: integer;

fs, sStream: TFileStream;

filenameOrg: String;

begin

i := 1;

fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive);

try

   while FileExists(FileName) do

   begin

     sStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);

     try

       fs.CopyFrom(sStream, 0);

     finally

       sStream.Free;

     end;

     Inc(i);

     FileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i));

   end;

finally

   fs.Free;

end;

end;

 

Code:

// Examples:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

SplitFile('C:\temp\FileToSplit.chm',1000000, ProgressBar1);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

CombineFiles('C:\temp\FileToSplit.001','H:\temp\FileToSplit.chm');

end;

 

 

©Drkb::03177

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php